我有一个代码,我希望删除基于用户输入的.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
答案 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: