我试图创建一个在文件末尾插入一行的脚本。但是如果我多次调用脚本它不应该在文件中多次创建相同的条目。
所以,如果我在第21行插入文件,我知道该文件是该文件的结尾。
sed -i '21s/.*/IP=192.168.1.1/' ip
第21行是空的,因此该命令无效。无论如何通过修改此命令将行插入空字符串?
我知道要追加到文件末尾的其他方法,但我主要担心的是如果多次调用脚本,则不要创建同一行的副本。
答案 0 :(得分:1)
使用sed:
sed -i '${/IP=192\.168\.1\.1/!s/.*/&\nIP=192.168.1.1/}' file
工作原理:
$
:匹配文件的最后一行/IP=192\.168\.1\.1/!
:如果最后一行不包含ip s/.*/&\nIP=192.168.1.1/
:将其替换为内容后跟换行符后跟IP=192.168.1.1
答案 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”。
答案 2 :(得分:-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
如果您想保存输出,只需将输出重定向到文件。