Regex sed正则表达式中的转义加号

Regex sed正则表达式中的转义加号,regex,ubuntu,sed,escaping,posix,Regex,Ubuntu,Sed,Escaping,Posix,有一个文件包含以下文本: CXX_FLAGS = -fPIC -Wall -Wextra -Wno-missing-braces -ffloat-store -pthread -std=gnu++17 要将字符串“-std=gnu++17”替换为“-std=c++17-std=gnu++17”,我尝试了: sed -i -e 's/\-std\=gnu\+\+17/\-std=c\+\+17 \-std=gnu\+\+17/g' filename 但是,在我删除\escape from fr

有一个文件包含以下文本:

CXX_FLAGS = -fPIC -Wall -Wextra -Wno-missing-braces -ffloat-store -pthread -std=gnu++17
要将字符串“-std=gnu++17”替换为“-std=c++17-std=gnu++17”,我尝试了:

sed -i -e 's/\-std\=gnu\+\+17/\-std=c\+\+17 \-std=gnu\+\+17/g' filename
但是,在我删除\escape from frst+sign-in搜索表达式之前,这不起作用。因此,这些似乎是好的:

sed -i -e 's/\-std\=gnu++17/\-std=c\+\+17 \-std=gnu\+\+17/g' filename
sed -i -e 's/\-std\=gnu+\+17/\-std=c\+\+17 \-std=gnu\+\+17/g' filename
sed -i -e 's/\-std\=gnu..17/\-std=c\+\+17 \-std=gnu\+\+17/g' filename
我知道当不在character类中时,+必须转义,但我认为在正则表达式中可以在任何字符前面加反斜杠。为什么在此处转义+符号会导致搜索替换失败


操作系统是Ubuntu 20.04 LTS。

您没有使用
-r
-E
选项,因此您告诉
sed
将regex模式解析为POSIX BRE表达式。在GNU
sed
中,在POSIX BRE表达式中,
\+
是与量化模式的一个或多个匹配的量词。运行
sed-e's/\-std\=gnu\++17/\-std=c\++17 \-std=gnu\++17/g'好的,BRE承认,他认为这一切都只是正则表达式。谢谢你的简洁表达!回答得好,解释得很好++wrt
我知道当不在character类中时,+必须转义
-不,它不在BRE中。wrt
我认为在正则表达式中可以用反斜杠作为任何字符的前缀-不,不能这样做,因为这样做可以将文字字符转换为元字符。查看哪些字符可以/必须转义,以及如何处理每个字符。
sed -i 's/-std=gnu++17/-std=c++17 &/' filename
s='CXX_FLAGS = -fPIC -Wall -Wextra -Wno-missing-braces -ffloat-store -pthread -std=gnu++17'
sed 's/-std=gnu++17/-std=c++17 &/' <<< "$s"
# => CXX_FLAGS = -fPIC -Wall -Wextra -Wno-missing-braces -ffloat-store -pthread -std=c++17 -std=gnu++17