将行替换/插入文件末尾

时间:2017-03-23 08:26:43

标签: linux bash text sed text-processing

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

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

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

第21行是空的,因此该命令无效。无论如何通过修改此命令将行插入空字符串?

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

3 个答案:

答案 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

如果您想保存输出,只需将输出重定向到文件。