sedのいくつかのパターンに一致する行のみを置き換える方法は?


8
$ echo -e 'CH12\nCH23au' | sed '/^CH/s=^=<b>='
<b>CH12
<b>CH23au

CHbyで始まる行を照合できることはわかって^CHいますが、どのようにして複数のパターンを照合できますか?

例:

入力:

CH12
CH23au

出力:

CH12
<b>CH23au

どのようにのみ配置する<b>がある場合^CHやauラインに?

回答:


8

CHが行の先頭になければならない場合、CHおよびの順序auは固定されているので、を探すことができます^CH.*au。

$ echo -e 'CH12\nCH23au' | sed '/^CH.*au/s=^=<b>='
CH12
<b>CH23au
$

2つのパターンの順序が固定されていない場合、次のようなことができます

sed -e '/pattern1/{;/pattern2/s/old/new/;}'

しかし、perlソリューション

perl -pe 'if (/pattern1/ && /pattern2/) {s/old/new/;}'

おそらくもっと読みやすいです。


5

別のアプローチ:

sed -e '/^CH/!b' -e '/au/!b' -e 's/^/<b>/'

b(最後に分岐任意のラベル引数を与えられていない場合は)のようなものであるcontinueか、next他の言語で。したがって、上記は次のようになります。

for (; line = readline(); print line) { # The implicit loop in sed
  if (!/^CH/) continue;
  if (!/au/) continue;
  line =~ s/^/<b>/
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.