Bash 如何基于带换行符的变量删除带sed的字符串?

Bash 如何基于带换行符的变量删除带sed的字符串?,bash,sed,Bash,Sed,我正在使用下面的bash脚本,其目标是从Go文件中删除头 这反过来又导致: header.sh:第10行:${HEADER@Q}:替换错误 如何正确格式化/转义变量以替换包含换行符的标题?不幸的是,sed基本上是一个面向行的工具,它不能跨行结束替换 如果你真的想使用sed,并且你的头有唯一的第一行和最后一行,并且你不太在意中间,你可以使用 sed '/first line/,/last line/d' $i 如果您真的想对整个头进行替换,请尝试使用Perl,如果您使用s修饰符,它可以处理替换中

我正在使用下面的bash脚本,其目标是从Go文件中删除头

这反过来又导致:

header.sh:第10行:${HEADER@Q}:替换错误


如何正确格式化/转义变量以替换包含换行符的标题?

不幸的是,
sed
基本上是一个面向行的工具,它不能跨行结束替换

如果你真的想使用sed,并且你的头有唯一的第一行和最后一行,并且你不太在意中间,你可以使用

sed '/first line/,/last line/d' $i
如果您真的想对整个头进行替换,请尝试使用Perl,如果您使用
s
修饰符,它可以处理替换中的行尾

perl -e '$_ = join("", <>); s/'"$HEADER"'//s; print' $i
perl-e'$\=join(“,”);s/“$HEADER”//s;打印“$i”

请注意,如果
$HEADER
包含
bash
或Perl元字符,则会出现问题。交给你来整理报价

替换命令的语法为
s/search/replace/flags
。。。您缺少替换部分。。如果要删除整行,请使用
/search/d
。。例如:
seq 5 | sed'/[24]/d'
用于某些改进/潜在问题/等。。。另请参见Thank@Sundeep,
/d
是否也是全局的?
d
删除整行,这是一个与替换不同的命令。。如果您只希望从一行中删除所有匹配的部分,请使用
s/search//g
,您需要
bash 4.4
或更新版本才能使用
${HEADER@Q}
btw。
sed '/first line/,/last line/d' $i
perl -e '$_ = join("", <>); s/'"$HEADER"'//s; print' $i