web-dev-qa-db-ja.com

sed置換文字列で改行をエスケープする

bの実行中に、sedを使用してbash文字を改行に置き換える試みを次に示します。

$> echo 'abc' | sed 's/b/\n/'
anc

いいえ、そうではありません

$> echo 'abc' | sed 's/b/\\n/'
a\nc

いいえ、それでもありません。私が欲しい出力は

a
c

助けて!

23
spraff

BSDまたはSolarisを使用しているようです。これを試して:

[jaypal:~/Temp] echo 'abc' | sed 's/b/\ 
> /'
a
c

黒のスラッシュを追加し、Enterキーを押して、sedステートメントを完成させます。

15
jaypal singh
$ echo 'abc' | sed 's/b/\'$'\n''/'
a
c

Bashでは、$'\n'は一重引用符で囲まれた改行文字に展開されます(man bashの「QUOTING」セクションを参照)。 3つの文字列は、引数としてsedに渡される前に連結されます。 Sedでは、改行文字をエスケープする必要があるため、貼り付けたコードの最初のバックスラッシュ。

5
tboyce12

すべてをグローバルに置き換えたいとは言わなかった b。はいの場合、代わりにtrが必要です。

$ echo abcbd | tr b $'\n'
a
c
d

Solaris5.8とbash2.03で動作します

4
glenn jackman

複数行のファイルでは、次のように、sedの両側のtrをパイプで通す必要がありました。

echo "$FILE_CONTENTS" | \ tr '\n' ¥ | tr ' ' ∑ | mySedFunction $1 | tr ¥ '\n' | tr ∑ ' '

Unixは、1900年代に作成された当時のように思えたので、改行や余分な先頭のスペースなど、あらゆる種類のものを取り除くのが好きです。とにかく、私が上に示したこの方法は問題を100%解決します。誰かがこれをどこかに投稿するのを見たかったのですが、それは私の人生の約3時間を節約できたからです。

1
CommaToast
echo 'abc' | sed 's/b/\'\n'/' 

あなたが行方不明です''周り\n

0
Ravi Bhatt