1

MSYS でのバッシングの問題: 次の単純な関数は、ユーザー入力 string に一致するすべての行を削除する必要があります$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 に答える