次のような行を検出するためにsed式を作成しようとしています。
s0:12345:respawn:/sbin/agetty -8 -s 115200 ttyS0 linux
そしてttys0
に交換something_else
#
コメント化された行(で始まる)を検出したくありません。
行全体を変更できますが、残りの行は変更せずに部分文字列のみを変更するにはどうすればよいですか?
答え1
これを行う1つの方法は次のとおりです。
echo 's0:12345:respawn:/sbin/agetty -8 -s 115200 ttyS0 linux' |
sed -e '/^[^#]/ s/ttyS0/foo/'
答え2
ttyS0の前部とttyS0の後部を一致させ、行が次に始まらないことを確認してください#
。
sed 's/^[^#]\(.*\)ttyS0\(.*\)/\1something\2/'
結果:
%> echo "s0:12345:respawn:/sbin/agetty -8 -s 115200 ttyS0 linux" | sed 's/^[^#]\(.*\)ttyS0\(.*\)/\1something\2/'
0:12345:respawn:/sbin/agetty -8 -s 115200 something linux
答え3
常にこれで始まる場合はs[number]colon
(GNU sedを使用して)、次のことができます。
sed -r '/^s[0-9]+:/s/ttyS0/something_else/' infile
これにより、必要に応じて正規表現で始まるすべての行が変更されます。