2013-08-01 11 views

risposta

54

Dando per scontato che non si dispone di linee con più # s questo dovrebbe funzionare:

sed -e '/BBB/ s/^#*/#/' -i file 

Nota: non è necessario/g dal momento che si sta facendo al massimo una sostituzione per riga.

+0

Ha funzionato, grazie! –

+2

Questo modificherà sempre la linea corrispondente per iniziare con un singolo #. Quindi se inizia con tre '#' s dopo questo comando, lo "pulirà" per iniziare con uno '#'. Per alleviare questo problema se si tratta di un problema, è sufficiente modificare la parte corrispondente di conseguenza (ad esempio 'sed -e '/^BBB /' ...) –

+1

'sed'/^ # BBB/'' intendi. Ma se BBB è da qualche parte nel mezzo non funzionerà. C'è un'opzione per scrivere 'sed '/^# /! {/ BBB/s/^/# /} ''che funzionerà molto meglio ma la mia soluzione iniziale è molto più semplice purché ne conosca il limite. – aragaer

2

Trovo che questa soluzione funzioni al meglio.

sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\ \1/' file 

Non importa quanti "#" simboli ci sono, non ne aggiungerà mai un altro. Se il pattern che stai cercando non include un "#", lo aggiungerà all'inizio della riga e aggiungerà anche uno spazio finale.

Se non si desidera uno spazio finale

sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\1/' file 
0

sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\ \1/' file

Questo non funziona per me con la parola chiave *.sudo, commenti a tutti i ...

Ony la la sintassi sotto funziona: sed -e '/sudo/ s/^#*/#/' file

Problemi correlati