如何忽略sed中的单词定界符
How to ignore word delimiters in sed
所以我有一个 bash 脚本,除了 sed 的一个问题外,它运行良好。
full=$(echo $full | sed -e 's/\b'$first'\b/ /' -e 's/ / /g')
除了在变量 $first 前面紧跟一个句点而不是空白 space 的情况外,这会很好用。在那些情况下,我不想删除变量。
示例:
full="apple.orange orange.banana apple.banana banana";first="banana"
full=$(echo $full | sed -e 's/\b'$first'\b/ /' -e 's/ / /g')
echo $first $full;
我只想删除整个单词 banana,而不对 orange.banana 或 apple.banana 做任何更改,那么如何让 sed 忽略点作为分隔符?
您想要 "banana" 前面是字符串开头或 space,然后是 space 或字符串结尾
$ sed -r 's/(^|[[:blank:]])'"$first"'([[:blank:]]|$)/ /g' <<< "$full"
apple.orange orange.banana apple.banana
注意使用 -r
选项(对于 bsd sed,使用 -E
)启用扩展的正则表达式——允许我们省略很多反斜杠。
所以我有一个 bash 脚本,除了 sed 的一个问题外,它运行良好。
full=$(echo $full | sed -e 's/\b'$first'\b/ /' -e 's/ / /g')
除了在变量 $first 前面紧跟一个句点而不是空白 space 的情况外,这会很好用。在那些情况下,我不想删除变量。
示例:
full="apple.orange orange.banana apple.banana banana";first="banana"
full=$(echo $full | sed -e 's/\b'$first'\b/ /' -e 's/ / /g')
echo $first $full;
我只想删除整个单词 banana,而不对 orange.banana 或 apple.banana 做任何更改,那么如何让 sed 忽略点作为分隔符?
您想要 "banana" 前面是字符串开头或 space,然后是 space 或字符串结尾
$ sed -r 's/(^|[[:blank:]])'"$first"'([[:blank:]]|$)/ /g' <<< "$full"
apple.orange orange.banana apple.banana
注意使用 -r
选项(对于 bsd sed,使用 -E
)启用扩展的正则表达式——允许我们省略很多反斜杠。