带有 sed 输出的猫

cat with output of sed

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

漫长的道路是:

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

有短途(排队)吗?

例如文件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 <i>filename</i>命令在第1行插入一个文件,第二个命令删除所有以[=17=开头的行].它们必须在单独的 -e 表达式中,因为在文件名之后必须有一个换行符或一个命令的结尾,所以这也可以工作:

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

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

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

注意命令的顺序很重要:删除命令 (d) 开始一个新的循环,跳过它之后的任何命令,所以 r 先走。 小提示:potong