使用以“w”开头的单词时 sed 有什么问题

使用以“w”开头的单词时 sed 有什么问题

这有效

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有特定的含义,它们不同于HW

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-zA-Z0-9_

作为大写版本否定一场比赛,你的\W手段匹配单个字符,这显然使正则表达式失败为您的输入字符串。

尝试例如:

echo "         {HERE     x=10" |sed 's/ *\WHERE \+/WHERE /g'
WHERE x=10

它有效是因为{ 匹配\W(因为{不是单词字符)!

相关内容