Shell 使用sed在文件的每一行中添加一句话

Shell 使用sed在文件的每一行中添加一句话,shell,sed,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的正确用法是什么?还有其他方法吗?您可以使用sed: 或awk: 对于bash: 使用sed:检查最佳方法。这可能是另一个问题 sed -i.bak -n 's/^/I have a /p' file

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

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的正确用法是什么?还有其他方法吗?

您可以使用sed:

或awk:

对于bash:

使用sed:检查最佳方法。这可能是另一个问题

sed -i.bak -n 's/^/I have a /p' file
注意:最好使用-i.bak或-i.whatever生成扩展名为.bak的备份文件

为了好玩,您还可以使用粘贴:


+我建议在读单词时不要调用变量单词,因为在一般情况下,它不只是读一个单词。一般来说,添加-r以防止read解释输入也是一个好主意。@mklement0很公平,只是将其更改为line,以便更清楚它捕获了什么。另外,关于-r,我知道在ManBash中看到-r->backslax不能作为转义字符。反斜杠被认为是该行的一部分。特别是,反斜杠换行符对不能用作换行符。。谢谢你们两个!
awk '{print "I have a", $0}' file
I have a dog
I have a cat
while read -r line
do
    echo "I have a $line"
done < file > tmp_file && mv tmp_file file
awk '{print "I have a", $0}' file > tmp_file && mv tmp_file file
sed -i.bak -n 's/^/I have a /p' file
$ paste -d" " <(printf "%0.sI have a\n" $(seq $(wc -l <file))) file
I have a dog
I have a cat
$ 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
sed -i 's/^/I have a /' your_file