我目前正在为“ 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行(域)时,文本文件将保持不变并且不会更新。 当我仅使用终端尝试相同操作时,一切正常。 有什么我想念的吗?
答案 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
文件。