用sed在文件的每一行中添加一个句子

时间:2014-06-03 15:20:50

标签: shell sed

我有一个包含此内容的文件:

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?还有另一种做法吗?

3 个答案:

答案 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