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

时间:2015-01-07 13:16:40

标签: shell sed

我有一个代码,我希望删除基于用户输入的.txt文件中的一行。

e.g

item.txt包含

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

用户希望根据他的输入删除整行#34;非常棒的东西"无论大小写如何匹配

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

2 个答案:

答案 0 :(得分:5)

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

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 - inplace在文件中删除并在进行更改之前创建.bak 我最后 - 忽略这个案子 d在最后 - 删除该行。

答案 1 :(得分:2)

你做得对,但是因为$choice中有空格,你必须把它放在引号之间(也是它的选择,而不是choice1,你忘记了第一个/):< / p>

~$ 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:

要忽略区分大小写,juste会添加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: