这个 sed 命令出了什么问题
What is going wrong with this sed command
我必须转换第一次出现的单词 'the' 并将其替换为每行输入文本中的 'this',区分大小写的搜索和替换。
以下是我执行任务的命令,但出错了
sed 's/\Wthe\W/this/'
我发现的问题与这个模拟案例类似:
输入文本:作为单词
输出文本(正确):作为那个词
输出文本:asthatword(命令生成的内容)。
您需要捕获周围的非词词the
,然后使用反向引用进行替换:
s='as the word'
sed 's/\(\W\)the\(\W\)/this/' <<< "$s"
as this word
或更好地使用单词边界:
sed 's/\bthe\b/this/' <<< "$s"
as this word
\W
是 PCRE, not BRE or ERE。因此,标准 sed
.
不支持它
sed 's/(^|[[:space:]])the([[:space:]]|$)/this/'
在^|[[:space:]]
中,^
匹配行首; [[:space:]]
匹配任何空白字符 class。将其放在括号内会创建一个匹配组,稍后可以用 </code> 引用(因为这是第一个这样的组)。</p>
<p><code>[[:space:]]|$
做同样的事情,但是 $
表示行尾。
就是说——如果您只针对 GNU sed,而不是 POSIX sed,您可以考虑:
sed 's/\<the\>/this/'
您也在替换非单词字符(在本例中为空白)。一个简单的方法是
sed 's/\Wthe\W/ that /'
或
sed 's/\(\W\)the\(\W\)/that/'
保留原来的非单词字符。
我假设您正在使用 \W
进行全词搜索和替换。尝试使用 \b
设置单词边界:
sed 's/\bthe\b/this/'
我必须转换第一次出现的单词 'the' 并将其替换为每行输入文本中的 'this',区分大小写的搜索和替换。
以下是我执行任务的命令,但出错了
sed 's/\Wthe\W/this/'
我发现的问题与这个模拟案例类似:
输入文本:作为单词
输出文本(正确):作为那个词
输出文本:asthatword(命令生成的内容)。
您需要捕获周围的非词词the
,然后使用反向引用进行替换:
s='as the word'
sed 's/\(\W\)the\(\W\)/this/' <<< "$s"
as this word
或更好地使用单词边界:
sed 's/\bthe\b/this/' <<< "$s"
as this word
\W
是 PCRE, not BRE or ERE。因此,标准 sed
.
sed 's/(^|[[:space:]])the([[:space:]]|$)/this/'
在^|[[:space:]]
中,^
匹配行首; [[:space:]]
匹配任何空白字符 class。将其放在括号内会创建一个匹配组,稍后可以用 </code> 引用(因为这是第一个这样的组)。</p>
<p><code>[[:space:]]|$
做同样的事情,但是 $
表示行尾。
就是说——如果您只针对 GNU sed,而不是 POSIX sed,您可以考虑:
sed 's/\<the\>/this/'
您也在替换非单词字符(在本例中为空白)。一个简单的方法是
sed 's/\Wthe\W/ that /'
或
sed 's/\(\W\)the\(\W\)/that/'
保留原来的非单词字符。
我假设您正在使用 \W
进行全词搜索和替换。尝试使用 \b
设置单词边界:
sed 's/\bthe\b/this/'