em um arquivo tenho as seguintes linhas
foo
bar
xxx
yyy
zzz
Eu preciso comentar as linhas xxx, yyy, zzz. Então eu executo o seguinte comando :
sed -e '/xxx/ s/^#*/#/' -i file
sed -e '/yyy/ s/^#*/#/' -i file
sed -e '/zzz/ s/^#*/#/' -i file
Fora
foo
bar
#xxx
#yyy
#zzz
Como posso fazer isso em um loop (para verificar se todas as linhas que me interessam, estão ou não comentadas, e se não estiverem, comente-as)?
obrigado
PD: Este comando pode ser útil, se eu souber o número da linha, mas não sei porque pode variar.
sed -e '2s/^/#/' -e '5s/^/#/' -e '7s/^/#/' file
PD: Também não posso usar EOF, porque cada linha é um regex
Com os seguintes dados de exemplo em
file
:Usando um
sed
que tem-E
para usar expressões regulares estendidas:Com
awk
:Usando padrão
sed
:Dado este texto de exemplo:
Você pode usar este comando:
^[^#]*
analisar as linhas que não começam com um#
.\(xxx\|yyy\|zzz\)
procure porxxx
,yyy
ouzzz
, capture-os e substitua por#
e o padrão capturado#\1
.