1

MSYS 中的抨击问题:以下简单函数应删除与用户输入字符串匹配的所有行$kwd

function delnote () {
   read kwd
   sed -e "/$kwd/d" -i ~/notes.txt
}

相反,我不断收到“sed -e expression #1, char 0: no previous regular expression”错误。为什么?

我对 bash 和 sed(以及 MSYS)都是新手,所以我不确定这是将变量传递给 sed 还是以错误的方式使用引号的问题(我已经毫不费力地尝试用""许多''变体替换)。我尝试使用此处提供的功能而不是我自己的功能,但仍然遇到相同的错误。

如果这是引号放错的问题,那么 sed 和 grep 在 bash 中处理用户输入的方式有什么区别?(与 sed 不同,'"$*"'在 grep 函数中使用确实有效。)

感谢您的任何帮助和解释!

4

1 回答 1

1

好的,在复制上面链接的解决方案时,我似乎搞砸了。现在它可以工作了,像这样:

function delnote () {
  sed -e "/`echo $*`/d" -i ~/notes.txt;
}

不过,作为非编码员和 n00b,我仍然希望能对我的初始版本有什么问题做出任何解释。另外,为什么echo似乎在这里解决了这个问题?谢谢。

于 2012-05-20T15:56:25.310 回答