微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法删除shell脚本中的文件行

我必须从shell脚本中删除文件中的一行。

我正在尝试这个:

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] 举报,一经查实,本站将立刻删除。

相关推荐