Uma maneira de fazer isso é a seguinte:
echo 's0:12345:respawn:/sbin/agetty -8 -s 115200 ttyS0 linux' |
sed -e '/^[^#]/ s/ttyS0/foo/'
Estou tentando gravar uma expressão sed para detectar linhas semelhantes a esta:
s0:12345:respawn:/sbin/agetty -8 -s 115200 ttyS0 linux
e substitua o ttys0
por something_else
Eu não quero detectar linhas comentadas (começando com #
)
Eu posso substituir a linha inteira, mas como eu simplesmente substituo a substring, deixando o restante da linha intacta?
Corresponda a parte antes de ttyS0 e depois de ttyS0, verifique também se a linha não começa com #
:
sed 's/^[^#]\(.*\)ttyS0\(.*\)/something/'
Resultado:
%> echo "s0:12345:respawn:/sbin/agetty -8 -s 115200 ttyS0 linux" | sed 's/^[^#]\(.*\)ttyS0\(.*\)/something/'
0:12345:respawn:/sbin/agetty -8 -s 115200 something linux
Se sempre começar com s[number]colon
você poderia fazer (com o GNU sed):
sed -r '/^s[0-9]+:/s/ttyS0/something_else/' infile
Que altera qualquer linha que comece com o regex, adapte-se para atender às suas necessidades.
Tags sed regular-expression