web-dev-qa-db-ja.com

Unixでのエコーと猫の組み合わせ

本当に簡単な質問です。シェルでechoとcatを組み合わせるにはどうすればよいですか。先頭に文字列を付けて、ファイルの内容を別のファイルに書き込もうとしていますか?

/ tmp/fileが次のようになっている場合:

this is a test

これを実行したい:

echo "PREPENDED STRING"
cat /tmp/file | sed 's/test/test2/g' > /tmp/result 

/ tmp/resultは次のようになります。

PREPENDED STRINGthis is a test2

ありがとう。

32
Dan

これはうまくいくはずです:

echo "PREPENDED STRING" | cat - /tmp/file | sed 's/test/test2/g' > /tmp/result 
38
Douglas

試してください:

(printf "%s" "PREPENDED STRING"; sed 's/test/test2/g' /tmp/file) >/tmp/result

括弧はコマンドをサブシェル内で実行するため、出力は>/tmp/resultリダイレクトの単一ストリームのように見えます。

11
Greg Hewgill

または、sedのみを使用する

  sed -e 's/test/test2/g
s/^/PREPEND STRING/' /tmp/file > /tmp/result
2
Iacopo

これが電子メールの送信用である場合は、次のようにCRLF行末を使用することを忘れないでください。

echo -e 'To: [email protected]\r' | cat - body-of-message \
| sed 's/test/test2/g' | sendmail -t

文字列内の-e-flagと\ rに注意してください。

設定:ループ内のこの方法は、世界で最も単純なバルクメーラーを提供します。

1
kaleissin

または:

{ echo "PREPENDED STRING" ; cat /tmp/file | sed 's/test/test2/g' } > /tmp/result
1
mathk

別のオプション:付加された文字列がすべての行ではなく一度だけ表示されると仮定します:

gawk 'BEGIN {printf("%s","PREPEND STRING")} {gsub(/test/, "&2")} 1' in > out
0
glenn jackman