替换/插入文件末尾的行



我正在尝试创建一个在文件末尾插入一行的脚本。但是,如果我多次调用脚本,则不应在文件中多次创建相同的条目。

因此,如果我在第 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/!:如果最后一行不包含 IP
  • s/.*/&nIP=192.168.1.1/ :将其替换为其内容,后跟换行符,后跟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

如果要保存输出,只需将输出重定向到文件即可。

最新更新