我有一个包含此内容的文件:
dog
cat
我希望在每个句子之前添加一个句子(我有一个),所以新内容应该是:
I have a dog
I have a cat
我试过
sed -i 'I have a ' file
但我得到这样的东西
I have a
dog
I have a
cat
哪种正确使用sed?还有另一种做法吗?
答案 0 :(得分:4)
您可以使用sed
:
sed -i.bak 's/^/I have a /' file
cat file
I have a dog
I have a cat
或awk
:
awk '{print "I have a", $0}' file
I have a dog
I have a cat
答案 1 :(得分:4)
使用bash
:
while read -r line
do
echo "I have a $line"
done < file > tmp_file && mv tmp_file file
基本上,读取每一行并用主要标题回显它们。然后重定向到临时文件。如果命令成功,则将临时文件移动到原始文件中。
使用awk
:
awk '{print "I have a", $0}' file > tmp_file && mv tmp_file file
使用sed
:检查anubhava's answer以获得最佳方式。这可能是另一个。
sed -i.bak -n 's/^/I have a /p' file
请注意,最好使用-i.bak
(或-i.whatever
)生成.bak
扩展名的备用文件。
只是为了好玩,您还可以使用paste
:
$ paste -d" " <(printf "%0.sI have a\n" $(seq $(wc -l <file))) file
I have a dog
I have a cat
paste -d" " file1 file
并排打印两个文件,空格为d
elimiter。 printf "%0.sI have a\n" $(seq $(wc -l <file))
打印“我有一个”file
行的次数。
$ wc -l <a
2
$ seq $(wc -l <a)
1
2
$ printf "%0.sI have a\n" $(seq $(wc -l <a))
I have a
I have a
答案 2 :(得分:1)
sed -i 's/^/I have a /' your_file