[英]Unable to delete a line in file in shell script
我必須從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
為什么? 如何使其工作?
這只是在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 }
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.