我sed
用来查找和替换项目,例如:
sed -i 's/fish/bear/g' ./file.txt
我想将此限制为仅更改前后没有字母或数字的项目,例如:
The fish ate the worm.
会改变,因为前后只有空格。The lionfish ate the worm.
不会改变,因为之前有一个字母fish
。
我怎样才能找到和替换一些项目,但如果至少有一个字母或数字出现在之前或之后?
使用单词边界转义:
sed -i 's/\<fish\>/bear/g' inputfile
某些版本sed
可能不支持此功能。
在 之前和之后使用否定字符类fish
,如下所示:\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)
. 这说:
这保证了紧接其前和紧随其后的字符fish
不是字母数字。
sed 's/\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)/\1bear\2/g'
检查字符串前后的字符。如果它在开头或结尾,则不会有要检查的字符,因此也要检查。
sed -i 's/\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)/\1bear\2/g'