用“ sed”删除文件中的文本无法正常工作

时间:2019-05-02 09:16:11

标签: linux sh

我目前正在为“ nslookup”命令编写一个小脚本,在测试中遇到了一个我不明白的问题。在我的脚本中,将自动创建一个.txt文件,并且用户可以根据需要输入一些文本。他还可以删除文档中的特定行。我尝试使用“ sed”编写它,但是它似乎无法正常工作。

在终端输出中显示菜单:

Domains:
1) new_domain
2) domain
3) Create new Domain
4) Delete a Domain
5) Quit
Input> 

前两个数字也代表每个文本的行。 删除域的代码如下:

filename=domains.txt
old_filename=domains_backup.txt
read -p "Which domain-number shall be deleted?: " num_input
mv $filename $old_filename
sed "/$num_input/d" < $old_filename > $filename
rm $old_filename

但是当执行该脚本并且用户想要删除第2行(域)时,文本文件将保持不变并且不会更新。 当我仅使用终端尝试相同操作时,一切正常。 有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

要通过行号删除行,您将要使用$num_input d而不是/$num_input/d:第二个匹配包含$num_input的行。

请注意,如果您使用GNU sed,则可以让它处理备份:

sed -i.backup "$num_input d" domains.txt

这将创建未修改的domains.txt的副本为domains.txt.backup(或在-i之后指定的任何后缀)并更新domains.txt文件。