bugfix> linux > 投稿

'\n' を交換したいより長い文字列を持つ各行の文字、例: "___\n"

私が試みるとき:

$ cat /tmp/test.csv | sed ':a;N;$!ba;s/\n/____\n/g'

次の出力が得られます

"00000";"29515470";"001";"001";"A6399000800";"";"";"-1";"142.72";"1.00";"1.00"____
"91930";"20029956";"001";"002";"A2128300018";"";"";"-1";"71.58";"1.00";"4.00"____
"91930";"20029962";"001";"003";"ZZ-OIL16";"";"";"-1";"14.48";"5.00";"3.00"____
"91930";"20029962";"001";"002";"A2661800009";"";"";"-1";"13.28";"1.00";"3.00"

最後の「\ n」は置き換えられません。

しかし、私のCSVファイルは次のようになります。

すべての \n を置き換える方法キャラクター?

私はこれを見つけました: sedを使用して改行(\ n)を置き換えるにはどうすればよいですか? 、しかし、このソリューションは最後の '\n' を処理しないため、私には適していませんキャラクター。

回答 2 件
  • sed を使用する :

    $ cat > foo
    this
    that
    $ sed 's/$/__/g' foo
    this__
    that__
    $ sed 's/$/__/g' foo | hexdump -C
    00000000  74 68 69 73 5f 5f 0a 74  68 61 74 5f 5f 0a        |this__.that__.|
    
    

    0a  最終的には。

    PS。無駄な cat がないことに注意してください 。

  • あなたがPerlについて尋ねているのではないことは知っていますが、これは完璧です—

    perl -pe 's/$/____/' foo.csv
    
    

    perl -pe  指定された各入力ファイル(またはstdin)のすべての行に対して指定されたコードを実行し、結果の行を出力します。コードは、出力する前に行を変更できます。

    コードでは、 s/$/____/  行の最後に4つのアンダースコアを追加します。

    すべての入力行が改行で終わると仮定すると、これはすべての改行にヒットします。これは、 -p の暗黙ループが   <> を使用します 、これにはコードが取得する内容の改行が含まれます。

    置換が機能するのは、 $  文字列を終了する改行の前に一致します。 DWIM!

    出力:

    "00000";"29515470";"001";"001";"A6399000800";"";"";"-1";"142.72";"1.00";"1.00"____
     "91930";"20029956";"001";"002";"A2128300018";"";"";"-1";"71.58";"1.00";"4.00"____
     "91930";"20029962";"001";"003";"ZZ-OIL16";"";"";"-1";"14.48";"5.00";"3.00"____
     "91930";"20029962";"001";"002";"A2661800009";"";"";"-1";"13.28";"1.00";"3.00"____
    
    

    ファンキーなフォーマットについては申し訳ありません。何らかの理由で4スペースが機能しませんでした。

あなたの答え