我有一个文件,其中包含:分隔数据,如
cat:dog:lion cat:mouse:tiger
我正试图用像狐狸这样的花药取代狗,例如使用bash。 我需要在文件内部进行更改而不更改其他数据
答案 0 :(得分:4)
三种可能的方法:
awk -F: -v OFS=: '{for (i=1; i<=NF; i++) if ($i=="dog") $i="fox"} 1'
perl -F: -lane 'print join ":" , map {$_ eq "dog" ? "fox" : $_} @F'
sed -r 's/^|$/:/g; s/:dog:/:fox:/g; s/^:|:$//g;'
使用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
标志更改将保存在文件本身中。