3

私は試していますが、 のブランチを理解できましたsed。なぜそれが必要で、どのような目的を解決するのでしょうか?

\nファイルからを削除するこのソリューションの例では、次のように使用します。

sed ':a;N;$!ba;s/\n/ /g'

ラベルを理解できません。

4

2 に答える 2

4

シンプルgotoです。スクリプトの最後に、ラベルの有無にかかわらず:label、宛先ラベルを宣言する必要があります。b条件付きジャンプtT.

あなたの例のスクリプトでは$!、最後の行を除くすべての行で「アドレス」条件が真です($ファイルの終わりを意味!し、条件を否定します)。したがって、ファイル全体をパターン空間に読み込むループがあり、ループの後のアクションにフォールスルーし、すべての (内部の) 改行 (の一部の方言) を置き換えますsed

# declare label 'a'
:a
# append next input line to pattern space
N
# loop back to 'a' unless at end of file
$!ba
# substitute all newlines in pattern space
s/\n/ /g
# fall through to end: print the pattern space

「ブランチ」という言葉が少し誤解を招く言葉であることには同意しますが、長い歴史があります。より適切な用語は、「ジャンプ」または「移動」です。

于 2013-01-08T06:19:12.073 に答える
2

sed回答のどこにブランチが表示されるかについては、次のような非常に多くの質問があります。

そして、他にもたくさんいると思います。

于 2013-01-08T06:45:22.163 に答える