bashを使用してファイルの各行の後に文字列を追加するにはどうすればよいですか?sedコマンドを使用して実行できますか?
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
sed -e 's/^/string after each line/' -i filename $は行末を意味します。^は行頭を意味します。
sed 's/^/string after each line/'期待どおりの動作をします(各行の先頭に追加します)が、実行sed 's/^/string after each line/'しません(行全体を追加文字列で置き換えます)。何ができますか?@TomDeGisi?
私は使用することを好み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
NR、変数を:awk '{print $0, NR}'
sed 's/ //g'これは私の要件にはうまくいきましたが、すべての行のスペースを削除しますg。
, likeを削除し{print $0"string to append after each line"}ます。
あなたがそれを持っているなら、lam(ラミネート)ユーティリティはそれを行うことができます、例えば:
$ lam filename -s "string after each line"
純粋なPOSIXシェルとsponge:
suffix=foobar
while read l ; do printf '%s\n' "$l" "${suffix}" ; done < file |
sponge filexargsと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
もちろんsponge、一時ファイルで置き換えることができます。その後mv、他のいくつかの回答と同様に、元のファイル名を上書きします...
sedリソースが非常に限られている場合を除いて、これらはどれもに適していません。
sedそのような単純な仕事には必要ありません。
セドは少し醜いです、あなたはそうエレガントにそれをすることができます:
hendry@i7 tmp$ cat foo
bar
candy
car
hendry@i7 tmp$ for i in `cat foo`; do echo ${i}bar; done
barbar
candybar
carbar
cat foo; $ {i} barをエコーします。foobar barbar bazbarを終了しましたが、いくつかのテストの後、私は私の推論について間違っているかもしれませんが、デニスは正しいです
echo "foo bar" | (for i in `cat`; do echo ${i}bar; done)入力が1行であっても2行を印刷しているfoo bar(およびcatファイルの代わりに標準入力から読み取り、このための違いはありません)。
touch一時ファイルなのですか?そして、私はそのsedコマンドの成功を条件としてコマンドを作成しcpます。そうしないと、オリジナルが失われる可能性があります。