根据 .txt 文件中具有分隔符的用户输入删除一行:

Deleting a line based on user input in a .txt file that has delimiter :

我得到一个代码,我希望根据用户的输入删除 .txt 文件中的一行。

例如

item.txt 包含

sword and shield:10:20:30
cloak and dagger:1:2:3
sock and shoes4:5:
very awesome things7:8:9

用户想要根据他的输入 "very awesome things" 删除整行,而不考虑 upper/lower 大小写,只要匹配

read choice1
sed -e $choice1/d item.txt

将 grep 与 -i(忽略大小写)和 -v(检索除模式以外的所有内容)选项一起使用,如下所示:

grep -iv "Very Awesome ThiNGS" item.txt ##use "$choice1" instead of "Very Awesome ThiNGS"
Output:
sword and shield:10:20:30
cloak and dagger:1:2:3
sock and shoes4:5:

如果您需要 sed 解决方案,您可以这样做:

sed -i.bak "/$choice/Id" test.txt

-i - 在文件中就地删除并在进行更改之前创建一个 .bak。
我在最后 - 忽略大小写。
d 最后 - 删除该行。

你答对了,但是因为$choice里面有空格,所以你必须把它放在引号之间(也是选择,而不是选择1,你忘记了第一个/) :

~$ sed -e /"$choice"/d item.txt
sword and shield:10:20:30
cloak and dagger:1:2:3
sock and shoes4:5:

您也可以将整个 sed 表达式括起来:

~$ sed -e "/$choice/d" item.txt
sword and shield:10:20:30
cloak and dagger:1:2:3
sock and shoes4:5:

要忽略区分大小写,只需添加 I 标志:

~$ read choice
VeRy awesome things
~$ sed -e "/$choice/Id" item.txt
sword and shield:10:20:30
cloak and dagger:1:2:3
sock and shoes4:5: