这有效
echo " HELLO x=10" |sed 's/ *\HELLO \+/HELLO /g'
删除 hello 之前和单词“HELLO”之后的连续空格
但这并不
echo " WHERE x=10" |sed 's/ *\WHERE \+/WHERE /g'
我试图用 \w 来逃避 \w ,如下所示
echo " WHERE x=10" |sed 's/ *\\"WHERE" \+/\"WHERE" /g'
但即使这样也不起作用。出了什么问题。
答案1
你为什么要逃避 H 和 W ?
\H
和\W
有特定的含义,它们不同于H
和W
。
echo " WHERE x=10" |sed 's/ *WHERE \+/WHERE /g'
答案2
把前面的话去掉就可以了\
。
echo " WHERE x=10" |sed 's/ *WHERE \+/WHERE /g'
WHERE x=10
正\
则表达式中的 in 用作各种类型匹配的转义字符。
用于查找单词字符,即来自, ,\w
的字符,包括(下划线)字符。a-z
A-Z
0-9
_
作为大写版本否定一场比赛,你的\W
手段不匹配单个字符,这显然使正则表达式失败为您的输入字符串。
尝试例如:
echo " {HERE x=10" |sed 's/ *\WHERE \+/WHERE /g'
WHERE x=10
它有效是因为{
是匹配\W
(因为{
不是单词字符)!