b
の実行中に、sed
を使用してbash
文字を改行に置き換える試みを次に示します。
$> echo 'abc' | sed 's/b/\n/'
anc
いいえ、そうではありません
$> echo 'abc' | sed 's/b/\\n/'
a\nc
いいえ、それでもありません。私が欲しい出力は
a
c
助けて!
BSDまたはSolarisを使用しているようです。これを試して:
[jaypal:~/Temp] echo 'abc' | sed 's/b/\
> /'
a
c
黒のスラッシュを追加し、Enterキーを押して、sed
ステートメントを完成させます。
$ echo 'abc' | sed 's/b/\'$'\n''/'
a
c
Bashでは、$'\n'
は一重引用符で囲まれた改行文字に展開されます(man bash
の「QUOTING」セクションを参照)。 3つの文字列は、引数としてsedに渡される前に連結されます。 Sedでは、改行文字をエスケープする必要があるため、貼り付けたコードの最初のバックスラッシュ。
すべてをグローバルに置き換えたいとは言わなかった b。はいの場合、代わりにtr
が必要です。
$ echo abcbd | tr b $'\n'
a
c
d
Solaris5.8とbash2.03で動作します
複数行のファイルでは、次のように、sedの両側のtrをパイプで通す必要がありました。
echo "$FILE_CONTENTS" | \ tr '\n' ¥ | tr ' ' ∑ | mySedFunction $1 | tr ¥ '\n' | tr ∑ ' '
Unixは、1900年代に作成された当時のように思えたので、改行や余分な先頭のスペースなど、あらゆる種類のものを取り除くのが好きです。とにかく、私が上に示したこの方法は問題を100%解決します。誰かがこれをどこかに投稿するのを見たかったのですが、それは私の人生の約3時間を節約できたからです。
echo 'abc' | sed 's/b/\'\n'/'
あなたが行方不明です''
周り\n