web-dev-qa-db-ja.com

sedを使用して、新しい行を文字に置き換えます

sedを使用して新しい行を削除し、<br>に置き換えていますが、目的の出力を取得できません。

私が書いた:

find . -name $1 -print0 | xargs -0 sed -i '' -e 's|\n|ABC|g'

...しかし、これは機能しません。

3
abhijeetmote

Sed式は各行を個別に処理しているため、実際には改行文字がパターンバッファーに読み込まれないため、置換できません。実際の改行も保持しながら<br>を追加する場合は、行末マーカー$を使用して、

sed -i'' 's|$|<br>|' file

空のバックアップファイル名-使用する場合、-iのように-i''の直後になければならないことに注意してください。また、単一の式を使用する場合、-eは必要ありません。

OTOH実際の改行文字を本当に置き換えたい場合は、たとえば、いくつかの余分なフープをジャンプする必要があります。

sed -i'' -e :a -e '$!N;s/\n/<br>/;ta' -e 'P;D' file

または、よりコンパクトに

sed -i'' ':a; $!N; s|\n|<br>|; ta; P;D' file

これは、連続するpairsの行をパターンバッファーに読み込んでから、間にある改行を置き換えます- Famous Sed One-ライナーの説明

2
steeldriver

新しい行を<br>で置き換える場合は、次を使用できます。

 find . -name $1 -print0 | xargs -0 sed -i 's/.*$/&<br\>/'
0
g_p

どうして

find . -name $1 | xargs sed -ri "s/$/<br>/"

iなしで試してください、最初;-))

0
laruiss

インライン\n<br>に置き換えるには、そのタスクでfindを呼び出す必要のないPerl(またはsed)を使用します。

Perl -pi -e "s/$/<br>/" myfile

またはエイリアスの場合:

alias brtag='Perl -pi -e "s/$/<br>/" $1'
0
Sylvain Pineau