簡體   English   中英

無法在Shell腳本中刪除文件中的一行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM