Bashを使用してファイルの各行の後に文字列を追加するにはどうすればよいですか? sedコマンドを使用して実行できますか?
sed
が-i
パラメーターによるインプレース編集を許可している場合:
sed -e 's/$/string after each line/' -i filename
そうでない場合は、一時ファイルを作成する必要があります。
typeset TMP_FILE=$( mktemp )
touch "${TMP_FILE}"
cp -p filename "${TMP_FILE}"
sed -e 's/$/string after each line/' "${TMP_FILE}" > filename
awk
を使用することを好みます。列が1つしかない場合は$0
を使用し、そうでない場合は最後の列に置き換えます。
一方通行、
awk '{print $0, "string to append after each line"}' file > new_file
またはこれ、
awk '$0=$0"string to append after each line"' file > new_file
持っている場合は、 lam (積層)ユーティリティで実行できます。例:
$ lam filename -s "string after each line"
純粋なPOSIX Shellおよび sponge
:
suffix=foobar
while read l ; do printf '%s\n' "$l" "${suffix}" ; done < file |
sponge file
xargs
およびprintf
:
suffix=foobar
xargs -L 1 printf "%s${suffix}\n" < file | sponge file
join
の使用:
suffix=foobar
join file file -e "${suffix}" -o 1.1,2.99999 | sponge file
paste
、yes
、head
、およびwc
を使用するシェルツール:
suffix=foobar
paste file <(yes "${suffix}" | head -$(wc -l < file) ) | sponge file
paste
は、$suffix
の前にTab文字を挿入することに注意してください。
もちろん、sponge
は一時ファイルに置き換えることができます。その後、他のいくつかの回答と同様に、元のファイル名にmv
を追加します...