我试图用来sed删除从用户输入中读取的行,从名称存储在变量中的文件中读取。现在sed所做的就是打印该行,而没有其他任何事情。
这是我正在使用的命令的代码片段:
FILE="/home/devosion/scripts/files/todo.db"
read DELETELINE
sed -e "$DELETELINE"'d' "$FILE"
Run Code Online (Sandbox Code Playgroud)
有什么我在这里想念的吗?
编辑:切换-e选项-i解决了我的问题!
您需要界定搜索范围。
#!/bin/bash
read -r Line
sed "/$Line/d" file
Run Code Online (Sandbox Code Playgroud)
将删除包含键入的输入的任何行。
请记住,sed 在正则表达式上匹配,任何特殊字符都将被视为如此。
例如,搜索1*实际上会删除包含任意数量的 1 的行,而不是实际的 1 和星号。
另请记住,当变量扩展时,它不能包含分隔符,否则命令将中断或产生未扩展的结果。
例如,如果“$Line”包含“/hello”,那么 sed 命令将失败并显示
sed: -e expression #1, char 4: extra characters after command.
在这种情况下,您可以转义/或使用不同的分隔符。
就我个人而言,我会为此使用 awk
awk -vLine="$Line" '!index($0,Line)' file
Run Code Online (Sandbox Code Playgroud)
它搜索精确的字符串并且没有 sed 命令的缺点。
| 归档时间: |
|
| 查看次数: |
19213 次 |
| 最近记录: |