我試圖創建一個腳本,在文件末尾插入一行。但是,如果我多次調用腳本它不應該在文件中多次創建相同的條目。替換/插入一行到文件末尾
所以如果我在第21行插入文件,我知道這是文件的結尾。
sed -i '21s/.*/IP=192.168.1.1/' ip
第21行爲空,因此此命令不起作用。無論如何,通過修改這個命令來插入一行到一個空字符串?
我知道其他方法追加到文件的末尾,但我主要關心的是不創建同一行的副本,如果腳本被多次調用。
我試圖創建一個腳本,在文件末尾插入一行。但是,如果我多次調用腳本它不應該在文件中多次創建相同的條目。替換/插入一行到文件末尾
所以如果我在第21行插入文件,我知道這是文件的結尾。
sed -i '21s/.*/IP=192.168.1.1/' ip
第21行爲空,因此此命令不起作用。無論如何,通過修改這個命令來插入一行到一個空字符串?
我知道其他方法追加到文件的末尾,但我主要關心的是不創建同一行的副本,如果腳本被多次調用。
隨着SED:
sed -i '${/IP=192\.168\.1\.1/!s/.*/&\nIP=192.168.1.1/}' file
工作原理:
$
:文件的最後一行/IP=192\.168\.1\.1/!
匹配:如果最後一行不包含IPs/.*/&\nIP=192.168.1.1/
:用它的內容替換它,接着是newl ine跟着IP=192.168.1.1
嘗試用這種if
一句話:
if [[ $(tail -1 filename.txt) != IP=192.168.1.1 ]]; then echo "IP=192.168.1.1" >> filename.txt; fi
可能追加「IP = 192.168.1.1」在這個情況下,該文件的到底是不是最後一行。
您可以通過使用awk完成這件事:
awk -v "total=$(wc -l file.1 | awk '{print $1}')" '{if(total==NR && $0 != "IP=192.168.1.1") { print "IP=192.168.1.1" } else { print $1 } }' file.1
如果你想保存輸出,只是輸出重定向到文件中。
這個解決方案會覆蓋最後一行,我想OP不想覆蓋,只是在最後一個非空行後面追加一個文件。 –
Zumo你錯了。如果該行已經存在,它不會追加相同的行。請檢查是否有聲明。 –
由於某種原因,如果我用示例文件嘗試命令,如果最後一行與IP行不匹配,那麼它會用IP行覆蓋我的文件的最後一行,如果最後一行與IP行匹配,那麼同一行被複制。 –
謝謝。這正是我想要的。 –