我正在尝试这个:
linenumber=0 ##CHeck If server IP exists if grep -wq $serverip $FILE; then echo "IP exists" linenumber=$(awk -v serverip="$serverip" '$0 ~ serverip {print NR}' $FILE) echo "$linenumber" sed -e '${$linenumber}d' $FILE fi
sed -e '1d' $FILE --> WOrks on CLI but inside script does not work
为什么? 如何让它工作?
从广泛到长格式的重塑
Ctrl + C来终止“grunt watch”,但是杀死从同一个bash开始的Atom编辑器,为什么?
将命令从bash脚本传递到Mongo shell,而不停止交互式Mongo shell
正则expression式egrep发现.gz但不是.tar.gz
如何在响应中返回某个字符后closuresnetcat连接?
用curl复制本地文件
Bash引用行为和sed
networking掩码validation似乎不工作在bash脚本中使用正则expression式,而IPvalidation工作正常
EUID和UID之间的区别?
这只是在你的sed命令周围使用不正确的引号,所以变量没有被使用。 忽略这样一个事实,即在1就足够的情况下不必要地使用3个工具,修复是这样的:
sed -e "${linenumber}d" "$FILE"
也许你的需求比看起来更复杂,但是我建议把你的整个脚本改为:
awk -v serverip="$serverip" '!($0 ~ serverip)' "$FILE"
这会打印每一行不包含shell变量$serverip 。 假设您已经转义了变量中存在的任何正则表达式元字符。
或者(更简洁地说):
sed "/$serverip/d" "$FILE"
如果你真的想把这些信息打印出来(我假设它们是用于调试的),那么很容易实现:
awk -v serverip="$serverip" '$0 ~ serverip { print "IP exists"; print NR; next } 1' "$FILE"
如果你对最后的1不熟悉,这只是一个普通的简写,它会导致awk打印每一行( 1总是为true,默认行为是{ print } )。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。