这个sed命令出了什么问题

Chi*_*a B 0 bash sed

我必须转换第一次出现的单词'the',并在每行输入文本中用'this'替换它,区分大小写搜索和替换.

以下是我执行任务的命令但是它出错了

sed's /\Wthe\W/this /'

我发现的问题类似于这个模拟案例:

输入文字:作为单词

输出文本(正确):作为该单词

输出文本:asthatword(命令生成的内容).

Cha*_*ffy 6

\WPCRE,而不是BRE或ERE.因此,标准不支持它sed.

sed 's/(^|[[:space:]])the([[:space:]]|$)/\1this\2/'
Run Code Online (Sandbox Code Playgroud)

^|[[:space:]],^匹配行的开头; [[:space:]]匹配任何空白字符类.将其放在括号内会创建一个匹配组,稍后可以引用该组\1(因为这是第一个这样的组).

[[:space:]]|$做同样的事情,但$指示行尾.


也就是说 - 如果你只针对GNU sed,而不是POSIX sed,你可能会考虑:

sed 's/\<the\>/this/'
Run Code Online (Sandbox Code Playgroud)