
末尾に「\」がある次の例では、\ および EOL 文字を削除する必要があります。
line 1\
line 2
line 3
line 4\
line 5
出力は
line 1 line 2
line 3
line 4 line 5
viを使用すると、次のように上記の内容を取得できます。:%s/\//n//g
ただし、端末でこれを行うと機能しません。どんな提案がありますか?
答え1
うーん...私が試したViエディタでは、Viの置き換えは機能しません。それはおそらく:%s/\\\n/ /g
Vimではうまくいきますが、Viではうまくいきません。
$ sed '/\\$/{N;s/\\\n/ /;}' file
line 1 line 2
line 3
line 4 line 5
これは、現在の行がバックスラッシュで終わるかどうかを検出し、その場合は次の行を追加し(sed
その間に改行を追加します)、バックスラッシュと改行を空白文字に置き換えます。
連続した2行の末尾にバックスラッシュがあると失敗します。これを行うには、次のようなものを使用します。
sed ':top;/\\$/{N;s/\\\n/ /;btop;}' file
ここでバックスラッシュのある行が処理されると、コードは最初に戻ります。
最後のスクリプトの注釈付きバージョンsed
:
:top; # define label "top"
/\\$/{ # the line ends with backslash
N; # append next line to pattern space with embedded newline
s/\\\n/ /; # substitute backslash and newline with space
btop; # branch to "top"
}
# (implicit print)