1

sed用来查找和替换项目,例如:

sed -i 's/fish/bear/g' ./file.txt

我想将此限制为仅更改前后没有字母或数字的项目,例如:

  • The fish ate the worm.会改变,因为前后只有空格。
  • The lionfish ate the worm.不会改变,因为之前有一个字母fish

我怎样才能找到和替换一些项目,但如果至少有一个字母或数字出现在之前或之后?

4

3 回答 3

3

使用单词边界转义:

sed -i 's/\<fish\>/bear/g' inputfile

某些版本sed可能不支持此功能。

于 2012-05-15T22:59:12.540 回答
2

在 之前和之后使用否定字符类fish,如下所示:\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\). 这说:

  1. 行首或任何非字母数字
  2. 紧随其后的是鱼
  3. 后跟行尾或任何非字母数字

这保证了紧接其前和紧随其后的字符fish不是字母数字。

sed 's/\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)/\1bear\2/g'
于 2012-05-15T22:27:52.433 回答
1

检查字符串前后的字符。如果它在开头或结尾,则不会有要检查的字符,因此也要检查。

sed -i 's/\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)/\1bear\2/g'
于 2012-05-15T22:34:05.477 回答