Regex 使用sed将字符串替换为文件,而不使用两个sed命令?

Regex 使用sed将字符串替换为文件,而不使用两个sed命令?,regex,bash,shell,sed,posix,Regex,Bash,Shell,Sed,Posix,在自动生成许可证标头的过程中,我有一个占位符:/*@@license\u header@*/,我可以用名为license的文件替换它,如下所示: sh-3.2$ sed -e $'/\/\* @@LICENSE_HEADER@@ \*\//{r license\n}' \ -e $'/\/\* @@LICENSE_HEADER@@ \*\//d' file.c 我是从其他渠道拼凑出来的。是否可以替换字符串,而不是发出第二个命令来删除字符串出现的行?Sed是一种用于编辑的编程语言,因此每行可以使

在自动生成许可证标头的过程中,我有一个占位符:
/*@@license\u header@*/
,我可以用名为
license
的文件替换它,如下所示:

sh-3.2$ sed -e $'/\/\* @@LICENSE_HEADER@@ \*\//{r license\n}' \
-e $'/\/\* @@LICENSE_HEADER@@ \*\//d' file.c

我是从其他渠道拼凑出来的。是否可以替换字符串,而不是发出第二个命令来删除字符串出现的行?

Sed是一种用于编辑的编程语言,因此每行可以使用多个命令

顺便说一下,我建议您将许可证字符串更改为不包含任何特殊正则表达式字符的字符串。在这里,我只做了
@@@LICENSE NUMBER@@
,所以我不必一直转义正则表达式字符。毕竟,它是你的字符串,所以你可以随心所欲:

sed  '/@@@LICENSE NUMBER@@@/ {
r license.txt
d
}' file.c

Sed是一种用于编辑的编程语言,因此每行可以使用多个命令

顺便说一下,我建议您将许可证字符串更改为不包含任何特殊正则表达式字符的字符串。在这里,我只做了
@@@LICENSE NUMBER@@
,所以我不必一直转义正则表达式字符。毕竟,它是你的字符串,所以你可以随心所欲:

sed  '/@@@LICENSE NUMBER@@@/ {
r license.txt
d
}' file.c

尝试
sed-e$'/\/\*@@LICENSE\u HEADER@\*/{r LICENSE\n;d;}文件.c

try
sed-e$'/\/\*@@LICENSE\u HEADER@\*/{r LICENSE\n;d;}文件.c

它作为注释存在于c代码中,因此
/**/表单是必需的。sed是否会对字符串中的
@
产生问题?当然!这是
file.c
!(头一巴掌!)。您仍然可以将
/*…*/
放在
文件.c
中,但不能将它们放在sed的正则表达式中。
@
非常安全。它们在正则表达式中没有特殊意义。我将在我的答案中添加一个示例。它作为注释存在于C代码中,因此
/**/表单是必需的。sed是否会对字符串中的
@
产生问题?当然!这是
file.c
!(头一巴掌!)。您仍然可以将
/*…*/
放在
文件.c
中,但不能将它们放在sed的正则表达式中。
@
非常安全。它们在正则表达式中没有特殊意义。我将在我的答案中添加一个例子。