linux - 检查文件是否包含特定字符串以及是否已注释

标签 linux bash shell

我想检查文件是否包含特定字符串(避免使用注释行),如果不包含,则要将新行添加到文件中。


搜索字符串:VOINFNADT05
文件:/etc/hosts


#127.0.0.1  localhost.localdomain   localhost.localdomain   localhost4  localhost4.localdomain4 localhost   hh
#::1    localhost.localdomain   localhost.localdomain   localhost6  localhost6.localdomain6 localhost   hh

#10.85.92.134 VOINFNADT05.ad.infosys.com VOINFNADT05 localhost
#10.138.15.1 VBLRSBODSPV204.ad.infosys.com VBLRSBODSPV204
10.138.14.128 VBLRSBODSPV203.ad.infosys.com VBLRSBODSPV203


如果找不到搜索字符串,则追加行:

10.85.92.134 VOINFNADT05.ad.infosys.com VOINFNADT05 localhost

最佳答案

请尝试以下操作:

file="/etc/hosts"
sed 's/#.*//' "$file" | grep VOINFNADT05 >/dev/null 2>&1 || echo "10.85.92.134 VOINFNADT05.ad.infosys.com VOINFNADT05 localhost" >> "$file"



sed命令sed 's/#.*//'删除注释(不覆盖文件)。
然后将输出馈送到grep
如果找不到该字符串,则将该行附加到文件中。


也许这很容易说,但是您应该使用root特权运行它。
希望这可以帮助。

关于linux - 检查文件是否包含特定字符串以及是否已注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59301110/

相关文章:

php - 如何使用 PHP 和远程 ssh 从文本文件中获取信息?

regex - 如何在 mac os x (BSD) sed 上转义加号?

linux - 计算多行中某个字段的出现次数

linux - 如何测试用crontab部署的脚本

linux - bash 函数中的返回值

linux - 正则表达式匹配 IP 地址但忽略本地主机

c - fork完成后停止执行

bash - 是否可以在bash脚本中剪切特定列并显示该列重复出现的次数?

linux - shell 编程或 SED/AWK

linux - 在 Linux 中删除文件名的 10 个字符