1

私はsedアイテムを見つけて交換するために使用しています、例:

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

これを制限して、前後に文字や数字がないアイテムのみを変更したいと思います。例:

  • The fish ate the worm.スペースだけが前後にあるので、変更されます。
  • The lionfish ate the worm.の前に文字があるので、変更されませんfish

一部のアイテムを見つけて置き換えるにはどうすればよいですか。ただし、直前または直後に少なくとも1つの文字または数字が表示されている場合はどうすればよいですか。

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 に答える