我对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命令,我在这里需要一些分隔符还是我做错了什么?
答案 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
,作为第一个正则表达式在()
。