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
我正在尝试创建一个在文件末尾插入一行的脚本。但是如果我多次调用脚本它不应该在文件中多次创建相同的条目。
所以如果我在第 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/!
: 如果最后一行不包含ips/.*/&\nIP=192.168.1.1/
:将其替换为其内容,然后是换行符,然后是IP=192.168.1.1