在Unix上结合echo和cat

时间:2010-06-09 11:44:27

标签: unix shell piping

非常简单的问题,如何在shell中组合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

感谢。

6 个答案:

答案 0 :(得分:38)

这应该有效:

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

答案 1 :(得分:11)

尝试:

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

括号在子shell中运行命令,因此输出看起来像>/tmp/result重定向的单个流。

答案 2 :(得分:2)

或者只使用sed

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

答案 3 :(得分:1)

或者:

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

答案 4 :(得分:1)

如果要发送电子邮件,请记住使用CRLF行结尾,如下所示:

echo -e 'To: cookimonster@kibo.org\r' | cat - body-of-message \
| sed 's/test/test2/g' | sendmail -t

请注意字符串中的 -e -flag和 \ r

设置为:循环中的这种方式为您提供世界上最简单的批量邮件程序。

答案 5 :(得分:0)

另一种选择:假设前置字符串应该只显示一次而不是每一行:

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