我必须改变第一次出现的单词''并将其替换为“这个'在每行输入文本中,区分大小写搜索和替换。
以下是我执行任务的命令,但是出错了
sed' s / \ Wthe \ W / this /'
我发现的问题类似于这个模拟案例:
输入文字:为单词
输出文字(正确):作为该词
输出文字: asthatword (命令生成的内容)。
答案 0 :(得分:6)
\W
是PCRE,而不是BRE or ERE。因此,标准sed
不支持它。
sed 's/(^|[[:space:]])the([[:space:]]|$)/\1this\2/'
在^|[[:space:]]
中,^
匹配行的开头; [[:space:]]
匹配任何空白字符类。将其放在括号内会创建一个匹配组,稍后可以使用\1
引用该组(因为这是第一个这样的组)。
[[:space:]]|$
也会这样做,但$
表示行尾。
那就是说 - 如果你只针对GNU sed,而不是POSIX sed,你可能会考虑:
sed 's/\<the\>/this/'
答案 1 :(得分:0)
您需要捕获围绕单词the
的非单词,然后使用反向引用代替:
s='as the word'
sed 's/\(\W\)the\(\W\)/\1this\2/' <<< "$s"
as this word
或更好地使用单词边界:
sed 's/\bthe\b/this/' <<< "$s"
as this word
答案 2 :(得分:0)
您正在替换非单词字符(在这种情况下为空格)。一个简单的方法是
sed 's/\Wthe\W/ that /'
或
sed 's/\(\W\)the\(\W\)/\1that\2/'
保留原始的非单词字符。
答案 3 :(得分:0)
我假设你正在使用\W
来进行整个单词的搜索和替换。请尝试使用\b
来设置字边界:
sed 's/\bthe\b/this/'