sed
を使用して新しい行を削除し、<br>
に置き換えていますが、目的の出力を取得できません。
私が書いた:
find . -name $1 -print0 | xargs -0 sed -i '' -e 's|\n|ABC|g'
...しかし、これは機能しません。
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-ライナーの説明 。
新しい行を<br>
で置き換える場合は、次を使用できます。
find . -name $1 -print0 | xargs -0 sed -i 's/.*$/&<br\>/'
どうして
find . -name $1 | xargs sed -ri "s/$/<br>/"
?
(i
なしで試してください、最初;-))
インライン\n
を<br>
に置き換えるには、そのタスクでfind
を呼び出す必要のないPerl(またはsed)を使用します。
Perl -pi -e "s/$/<br>/" myfile
またはエイリアスの場合:
alias brtag='Perl -pi -e "s/$/<br>/" $1'