6

\nの複数のインスタンスを含むファイルがあります。

それらを実際の改行に置き換えたいのですが、sed は\nを認識しません。

私は試した

sed -r -e 's/\n/\n/'
sed -r -e 's/\\n/\n/'
sed -r -e 's/[\n]/\n/'

およびそれを回避する他の多くの方法。

sed はリテラル\nを認識できますか? もしそうなら、どのように?

\nを実際の改行として解釈するファイルを読み取ることができる別のプログラムはありますか?

4

5 に答える 5

9

これを試してもらえますか

sed -i 's/\\n/\n/g' input_filename
于 2013-11-04T05:55:04.550 に答える
0

awkこれをうまく処理しているようです:

echo "test \n more data" | awk '{sub(/\\n/,"**")}1'
test ** more data

\ここでは、 usingをエスケープする必要があります\\

于 2013-11-04T06:23:43.943 に答える
0
$ echo "\n" | sed -e 's/[\\][n]/hello/'
于 2013-11-04T06:05:48.690 に答える
0
  1. sed一度に 1 行ずつ動作するため、 1 行だけでは機能しません (読み取り時にバッファーに\n削除されます)。、またはをsed使用して、バッファーを複数行で埋めてから、内部に表示する必要があります。注意してください、これは行末ではなく、文字列/バッファの終わりです。NnHh\n^$\n
  2. \n置換パターンではなく、検索パターンで認識されます。それを使用するための2つの方法(サンプル):
    sed s/\(\n\)bla/\1blabla\1/
    sed s/\nbla/\
    blabla\
    /
    
    1 つ目は、\n既に内部を後方参照として使用します (置換パターンの短いコード)。2番目は実際の改行を使用します。

だから基本的に

sed "N
$ s/\(\n\)/\1/g
"

動作します(ただし、少し役に立たない)。それs/\(\n\)\n/\1/gはあなたが望むものにもっと似ていると思います。

于 2013-11-04T10:37:11.393 に答える