与sed输出的猫

时间:2016-03-01 06:33:45

标签: unix sed cat

我想删除文件(##)中以file.a开头的所有行,并将其替换为另一个文件(file.b)的所有行。要从file.a删除的行首先出现在该文件中(它们之前没有行)。

漫长的道路将是:

sed -i '/##/d' file.a
cat file.b file.a > file.c
mv file.c file.a

是否存在短线(直线)?

1 个答案:

答案 0 :(得分:1)

例如文件file.a

## line
## line
## line
linea1
linea2
linea3

file.b

lineb1
lineb2
lineb3

这应该这样做:

$ sed -e '1r file.b' -e'/^##/d' file.a
lineb1
lineb2
lineb3
linea1
linea2
linea3

r filename命令在第1行插入文件,第二个命令删除以##开头的所有行。它们必须在单独的-e表达式中,因为在文件名之后必须有换行符或命令的结尾,所以这也可以工作:

sed '1r file.b
/^##/d' file.a

对于file.a的就地修改,命令变为

sed -i -e '1r file.b' -e'/^##/d' file.a

请注意,命令的顺序很重要:删除命令(d)启动一个新的循环,并且跳过它之后的任何命令,因此r 具有先行。 Hat-tip:potong