作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在配置文件中,我希望始终替换特定“key=xxxx”等号后面的任何内容,但跳过“key=specificvalue”的所有实例。等号后面的值可以是除“specificvalue”之外的任何值。
如何在 bash shell 脚本中执行此操作?
文件名为 caConfig.txt。我需要修改的行以 commonName 开头,后跟空格和等号。我想用传递的参数 $1 替换右边的内容。
commonName = supplied
commonName = supplied
commonName = walmart-sam.local.lan
我需要跳过前两行,修改第三行中的任何内容。我宁愿不指望行的顺序。
最佳答案
我会说使用 AWK:
awk -v a="$1" '/^commonName/ && $3 != "supplied" { $3=a } { print }' caConfig.txt
对于以“commonName”开头的任何行,如果未“提供”原始值,则将第三列替换为 $1
。
代替 { print }
打印每一行,您可以只输入 1
:
awk -v a="$1" '/^commonName/ && $3 != "supplied" { $3 = a } 1' caConfig.txt
如果你想修改文件,你可以使用间接:
awk 'commands' > tmp && mv tmp caConfig.txt
或者如果你的 gawk 版本 >= 4.1.0,你可以使用 inplace 模块:
awk -i inplace 'commands' caConfig.txt
关于linux - Bash:如何在跳过 key=value 的特定实例时始终如一地替换等号后面的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22309038/
我是一名优秀的程序员,十分优秀!