linux sed,同时插入和追加

时间:2014-02-28 16:53:08

标签: linux bash sed

我对linux sed命令有疑问。我只想在每一行之前插入一些内容,并在每一行之后追加。我想同时做这些事情

例如,假设file.txt就像:

1
2
3 

我需要输出:

hello
1
world
hello
2 
world
hello 
3
world

所以我认为命令应该是:

cat file.txt | sed 'i\
hello\
a\
world\
'

但结果不对, a 不会被解释为sed命令,我在这里需要一些分隔符还是我做错了什么?

4 个答案:

答案 0 :(得分:2)

您应该在“hello”和“world”之后删除反斜杠,因此命令变为:

cat file.txt | sed 'i\
hello
a\
world 
'

在“hello”之后加上反斜杠将“hello”加入“a”,好像“a”是要插入的另一行。

答案 1 :(得分:1)

保持简单并使用awk:

awk '{printf "Hello\n%s\nWorld\n",$0}' file

或者如果您愿意:

awk '{print "Hello"; print; print "World"}' file

甚至:

awk '{
    print "Hello"
    print
    print "World"
}' file

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -e 'ihello' -e 'aworld' file

sed $'ihello\naworld\n' file

答案 3 :(得分:0)

您可能想尝试此命令:

sed -ri 's/(.*)/hello\n\1\nworld/' file.txt

<强>解释

  • 使用正则表达式选项-r, (.*)将包含每个整行的内容,而这些内容又会更改为hello
  • 后跟换行符(即\n),
  • 后跟\1(这是整行的内容,由(.*)收集),
  • 后跟换行符,然后是world

使用正则表达式,.是任何字符,.*在该行上出现零次或多次,(.*)将该行放入\1,作为第一个正则表达式在()