linux - 关于 sed 模式匹配的建议

标签 linux bash sed

我必须在包含 的行上用 getzb="2"zztype="1" 替换 getzb="0"zztype="0" qsid="90"qsid="100" 所以我写了下面的 sed 命令:

sed '/qsid="90"\|qsid="100"/s/\(getzb=\)"0" \(zztype=\)"0"'/\1"2" \2"1"/  

看起来很丑,有没有大神指教一下?

最佳答案

试试这个:

sed -r '
    /\bqsid="(90|100)"/{
        s/\bgetzb="0"/getzb="2"/g;
        s/\bzztype="0"/zztype="1"/g
    }
'

样本测试

$ cat file
getzb="0" zztype="0" foobar
getzb="0" zztype="0" 
getzb="0" zztype="0" qsid="90" or qsid="100"

$ sed -r '
    /\bqsid="(90|100)"/{
        s/\bgetzb="0"/getzb="2"/g;
        s/\bzztype="0"/zztype="1"/g
    }
' file
getzb="0" zztype="0" foobar
getzb="0" zztype="0" 
getzb="2" zztype="1" qsid="90" or qsid="100"

关于linux - 关于 sed 模式匹配的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495175/

相关文章:

linux - 如何匹配文件名中的字符串并根据字符串重命名文件?

bash - 如何转义嵌套 bash 命令返回的空格

linux - 'sed -i' 和 'sed ... > file' 之间的区别

linux - 从一个巨大的(有数百万条记录和列)OFS 文件(没有固定标题行)unix 中查找所有唯一列

c++ - arm-none-eabi-g++ 编译器抛出编译错误 pthread_exit 未在此范围内声明

PHP cron 脚本每分钟触发一次以上

bash - 为什么 bash -c "false; echo $?"打印 0?

git - git 别名中的 AWK 语句

linux - 尝试使用 sed 删除范围内的某些行

linux - 使用物理地址获取内存的哪种实现是正确的?