テキストファイルのすべての行の最後に文字列を追加しようとしていますが、どこかに間違いがあります。
例:
私はこれをテキストファイルに入れました:
begin--fr.a2dfp.net
begin--m.fr.a2dfp.net
begin--mfr.a2dfp.net
begin--ad.a8.net
begin--asy.a8ww.net
begin--abcstats.com
...
走る:
sed -i "s|\x0D$|--end|" file.txt
そして私は得る:
begin--fr.a2dfp.net--end
begin--m.fr.a2dfp.net--end
begin--mfr.a2dfp.net--end
begin--ad.a8.net
begin--asy.a8ww.net--end
begin--abcstats.com
...
文字列は特定の行にのみ追加され、他の行には追加されません。
なぜか?
\x0D
はキャリッジリターンで、テキストエディタに表示される場合と表示されない場合があります。したがって、WindowsとUnix/Linuxシステムの両方でファイルを編集した場合、改行が混在する可能性があります。キャリッジリターンを確実に削除する場合は、dos2unix
を使用する必要があります。本当に行末にテキストを追加したい場合は、sed -i "s|$|--end|" file.txt
を使用してください。
これを行うにはいくつかの方法があります。
Perl
Perl -i -pe 's/$/--end/' file.txt
sed
sed -i 's/$/--end/' file.txt
awk
awk '{$NF=$NF"--end"; print}' file.txt > foo && mv foo file.txt
シェル
while IFS= read -r l; do
echo "$l""--end";
done < file.txt > foo && mv foo file.txt
ex
を使用してみてください:
ex +"%s/$/--end/g" -cwq foo.txt
これはvi -e
と同等です。
オプション-i
はLinuxとUnixの間で完全に互換性がなく、他のオペレーティングシステムでは使用できない場合があります。