Replacing/Inserting 一行到文件末尾

Replacing/Inserting a line to the end of a file

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

所以如果我在第 21 行插入文件,我知道这是该文件的末尾。

sed -i '21s/.*/IP=192.168.1.1/' ip

第 21 行是空的,因此该命令不起作用。通过修改此命令,是否有向空字符串插入一行的方法?

我知道有其他方法可以追加到文件末尾,但我主要担心的是如果脚本被多次调用,不会创建同一行的副本。

试试这个 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 }')" '{if(total==NR && [=10=] != "IP=192.168.1.1") { print "IP=192.168.1.1" } else  { print  } }' file.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