微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除在sed中给定变量的行?

我正在尝试使用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] 举报,一经查实,本站将立刻删除。

相关推荐