我想删除文件(##
)中以file.a
开头的所有行,并将其替换为另一个文件(file.b
)的所有行。要从file.a
删除的行首先出现在该文件中(它们之前没有行)。
漫长的道路将是:
sed -i '/##/d' file.a
cat file.b file.a > file.c
mv file.c file.a
是否存在短线(直线)?
答案 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