bash替换a:单独文件中的单词

时间:2014-02-12 20:33:23

标签: linux bash

我有一个文件,其中包含:分隔数据,如

cat:dog:lion
cat:mouse:tiger

我正试图用像狐狸这样的花药取代狗,例如使用bash。 我需要在文件内部进行更改而不更改其他数据

2 个答案:

答案 0 :(得分:4)

三种可能的方法:

  1. awk -F: -v OFS=: '{for (i=1; i<=NF; i++) if ($i=="dog") $i="fox"} 1'
  2. perl -F: -lane 'print join ":" , map {$_ eq "dog" ? "fox" : $_} @F'
  3. sed -r 's/^|$/:/g; s/:dog:/:fox:/g; s/^:|:$//g;'
  4. 使用sed和perl,使用-i就地编辑文件 使用awk:awk ... > tmpfile && mv tmpfile orig_file

答案 1 :(得分:2)

您可以使用sed inline:

sed -i.bak -r 's/(^|:)dog(:|$)/\1fox\2/g' file

OSX上的OR:

sed -i.bak -E 's/(^|:)dog(:|$)/\1fox\2/g' file

由于-i标志更改将保存在文件本身中。