;
複数のsed式をキャラクターと一緒にチェーンすることができます。それぞれを個別に見てみましょう。
最初の式、/^void.*{$/!b
は、区切り記号の間にマッチャー式があり/
ます。一致します:
^
-行の先頭
void
-その後に「void」という文字が続きます
.*
-その後に何か
{
-続いて左カーリー
$
-行の終わりが続きます
その最初の式の修飾子、は!b
、マッチャーが一致しない場合、sed評価を中止することを意味します。
式は:a
ラベルです。これは、分岐と呼ばれるgotoのようなsed機能で使用されます。次の式でラベルがどのように使用されるかを見ていきます。
式は次のよう/\n}$/bb
に一致します。
\n
-改行
}
-右カーリーが続きます
$
-行の終わりが続きます
修飾子bb
は、一致するものが見つかった場合、ラベルbに「分岐」することを意味します。ラベルbは、後の式でとして定義され:b
ます。
式は、途中に$!{N;ba}
がありますが、1つとして読み取る必要があります。;
この場合のカーリーは、一緒に実行されることを意図した一連のコマンドを表しています。
$!
-入力の終わりでない場合
{
-コマンドのグループを開始します(この場合、2つあります)
N
-静かに別の行を読む
ba
-ラベルを付けるための分岐
}
-コマンドのグループを終了します
次は、式を介して1行:b
のシングルを単独で一致させるときにヒットするラベルです。}
/\n}$/bb
最後に、かなり標準的な正規表現である2つの代替パターンがあります。前のs
式は本質的にを意味しs/find_this/replace_it_with_this/
ます。の場合s/\n/&test1&/
、次のようになります。
\n
-改行を見つける
/
-そしてそれを
&
-最初の式で一致したもの(この場合は改行)
test1
-単語test1
&
-そしてまた一致したもの
つまり、基本的には次を。s/\n/&test1&/
に置き換えることを意味します。\n
\ntest1\n
最後の式も同様ですが、キャプチャと呼ばれるものを導入しています。\(
キャプチャを使用すると、すべてを一致させることができますが\)
、式の置換部分で使用するために、すべてを保持します。たとえば、。の入力文字列が与えられた場合s/a\(b\)c\(d\)e/\1 \2/
に出力されます。例では、、およびは、それぞれエスケープされたparens、およびでキャプチャされたものに置き換えられます。b d
abcde
\1
\2
b
d
s
-これは置換パターンです:
/
- 探す
\(
\1
-そして置換変数に入れます
.
- なんでも
*
-そしてそれの任意の量
\n
-最初に出会った改行を含む
\)
-(キャプチャの終了\1
)
\(
\2
-そして置換変数に入れます
.
- なんでも
*
-そしてそれの任意の量
\n
-最初に出会った改行を含む
\)
-(キャプチャの終了\2
)
/
-そしてそれをすべてに置き換えます
\1
-最初にキャプチャされたもの、
test2\n
--test2 \ n、
\2
-そして2番目にキャプチャされたもの。