39

非常简单的问题,我如何在 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

谢谢。

4

6 回答 6

45

这应该有效:

echo "PREPENDED STRING" | cat - /tmp/file | sed 's/test/test2/g' > /tmp/result 
于 2010-06-09T11:47:00.413 回答
11

尝试:

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

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

于 2010-06-09T11:47:20.740 回答
2

或者只使用 sed

  sed -e 's/test/test2/g
s/^/PREPEND STRING/' /tmp/file > /tmp/result
于 2010-06-09T11:55:04.217 回答
1

或者还有:

{ echo "PREPENDED STRING" ; cat /tmp/file | sed 's/test/test2/g' } > /tmp/result
于 2010-06-09T13:12:05.043 回答
1

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

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

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

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

于 2013-04-26T08:01:21.357 回答
0

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

gawk 'BEGIN {printf("%s","PREPEND STRING")} {gsub(/test/, "&2")} 1' in > out
于 2010-06-09T13:50:51.907 回答