我正在尝试使用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命令的缺点.
标签:bash,sed,linux 来源: https://codeday.me/bug/20191119/2033439.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。