如何使用awk或sed有条件地搜索替换?

时间:2011-07-11 11:25:45

标签: sed awk

包含此内容的文件:

var1 = true

如何使用sed / awk切换此值?

我查看了群组,sed地址..但是它没有说明如何保存像“找到它”或“找不到它”这样的返回值。 搜索将var1 = true替换为var1 = false

编辑:似乎没有写入文件..ever:

sed 's/var1 = true/var1 = foo/g' ./variables1
sed 's/var1 = false/var1 = true/g' ./variables1
sed 's/var1 = foo/var1 = false/g' ./variables1

命令行输出:

  

var1 = foo

     

var1 = true

     

var1 = true

怪异

edit2 :它与sed -i一起用于就地编辑

2 个答案:

答案 0 :(得分:1)

sed 's/var1 = true/var1 = false/g'

答案 1 :(得分:1)

使用gawk获取捕获括号:

printf "%s\n" "v1 = true" "v2=false" |
gawk '
    match($0, /([[:alnum:]]+)[[:space:]]*=[[:space:]]*(true|false)/, ary) {
        printf("%s = %s\n", ary[1], ary[2] == "true" ? "false" : "true")
    }
'

可生产

v1 = false
v2 = true

要写入相同的文件名,请使用以下内容:

filename=./variables1
tmpfile=$(mktemp)   # or use tmpfile="$filename.tmp.$(date +%s).$$"

gawk '...' "$filename" > "$tmpfile" && 
  mv "$filename" "$filename"~ && 
  mv "$tmpfile" "$filename"

如果您不打算备份文件,请删除第一个mv