我想在每行之前用sed或awk打印同一行

我想在每行之前用sed或awk打印同一行,awk,sed,Awk,Sed,我想在第一行之前插入一个字符串,每隔一行添加一个字符串 之前: a b c d 之后: INSERT a INSERT b INSERT c INSERT d 提前感谢。使用GNU: $ awk '{ print "INSERT" ORS $0 }' file INSERT a INSERT b INSERT c INSERT d sed 's/.*/INSERT\n&/' file 或 输出: INSERT a I

我想在第一行之前插入一个字符串,每隔一行添加一个字符串

之前:

a  
b  
c  
d  
之后:

INSERT  
a  
INSERT  
b  
INSERT  
c  
INSERT  
d  
提前感谢。

使用GNU:

$ awk '{ print "INSERT" ORS $0 }' file
INSERT
a  
INSERT
b  
INSERT
c  
INSERT
d
sed 's/.*/INSERT\n&/' file

输出:

INSERT a INSERT b INSERT c INSERT d
最短的awk是

awk '{print "INSERT"}1' file
在Cyrus的评论之后,我意识到有一个短得多的版本,短了两个字符。

使用:


&在你的第二个解决方案中不需要。@LoMaPh:抓得好!我已经更新了我的答案。第二个解决方案是最好的。我在linux机器上尝试过。它工作了,但是当我用vim打开输出文件时,在a、b、c和d行的末尾打印^M。例如,a^M。我怎么能没有^M呢?我只是想这是因为我的源文件来自dos系统。因此,我使用dos2unix命令删除^M.or和gawk和mawk:awk'$0=INSERT\n$0'文件。“但我不知道它为什么有效。”塞勒斯·布莱恩特。这是因为平等。a=b将返回b的值,在本例中,这不是一个空字符串。因此,模式被设置为true,因此它将打印$0。您必须记住,awk行看起来像带有默认规则print$0的模式{rule}。请记住,如果您执行$0=INSERT\n$0,您就告诉awk对$0执行字符串连接,然后将$0重新拆分为字段-这明显比简单地打印INSERT然后$0要慢,因为文件足够大,效率很重要。好的建议。我只是这么做了。我不太清楚为什么这个问题被搁置。注意:POSIX中的相同内容是:sed'I\^JINSERT',而^J是由^V创建的^J@kvantour哦,我知道我插入了,但不是关于这个。有趣的
awk '{print "INSERT"}1' file
$ sed 'i INSERT' file
INSERT
a
INSERT
b
INSERT
c
INSERT
d