$ echo -e 'CH12\nCH23au' | sed '/^CH/s=^=<b>='
<b>CH12
<b>CH23au
CH
byで始まる行を一致させることができることを知っていますが、複数のパターンをどのように一致^CH
させることができますか?
例:
入力する:
CH12
CH23au
出力:
CH12
<b>CH23au
<b>
特定の場所^CH
と行にのみ配置する方法はau
?
答え1
合計の順序は固定されているため、その行CH
の先頭に表示する必要がある場合は見つかります。CH
au
^CH.*au
$ echo -e 'CH12\nCH23au' | sed '/^CH.*au/s=^=<b>='
CH12
<b>CH23au
$
両方のモードの順序が固定されていない場合は、次のようにできます。
sed -e '/pattern1/{;/pattern2/s/old/new/;}'
しかし、Perlソリューションは
perl -pe 'if (/pattern1/ && /pattern2/) {s/old/new/;}'
読みやすくすることもできます。
答え2
別の方法:
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>/
}