我正在尝试使用sed从名称存储在变量中的文件中删除从用户输入读取的行.现在,所有sed所做的只是打印行而已.
这是我正在使用的命令的代码片段:
FILE="/home/devosion/scripts/files/todo.db"
read DELETELINE
sed -e "$DELETELINE"'d' "$FILE"
我在这里缺少什么吗?
编辑:用-i切换-e选项解决了我的麻烦!
解决方法:
您需要定界搜索.
#!/bin/bash
read -r Line
sed "/$Line/d" file
将删除任何包含键入的输入的行.
请记住,尽管sed在正则表达式上匹配,但任何特殊字符都将被视为正则表达式.
例如,搜索1 *实际上会删除包含任意数量的1(不是实际的1和星号)的行.
还要记住,当变量扩展时,它不能包含定界符,否则命令将中断或产生未扩展的结果.
例如,如果“ $Line”包含“ / hello”,则sed命令将失败并显示
sed:-e表达式#1,字符4:命令后的多余字符.
在这种情况下,您可以转义/或使用其他定界符.
我个人会为此使用awk
awk -vLine="$Line" '!index($0,Line)' file
它搜索精确的字符串,并且没有sed命令的缺点.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。