1

次のコードを実行します

sed 's/\([^ ]+\) your \([^ ]+\)/ \2\1er/' < fail

ファイルの失敗は

fail your test

上記のコマンドは私に与えます

fail your test

「testfailer」を与えるはずですが。

2 番目と 1 番目のグロブ\2\1は、単語「er」の先頭にある必要があります。これは、問題が検索部分の正規表現にある可能性があることを示唆しています。しかし、それらは私にとって正しいようです。

コードに間違いはありませんか?

4

2 に答える 2

5

一般的な正規表現または園芸品種のsed正規表現は + を理解できません。ええ、私は知っています、それがどれほど愚かなことか。したがって、これはコマンドラインの同等の動作バージョンです。

sed 's/\([^ ][^ ]*\) your \([^ ][^ ]*\)/ \2\1er/' < fail

拡張正規表現を要求する場合にも機能します。その場合、括弧のバックスラッシュを削除します。

sed -r 's/([^ ]+) your ([^ ]+)/ \2\1er/' < fail
于 2009-04-29T16:46:39.413 に答える
4

プラス記号をエスケープすると、コードは機能します。

sed 's/\([^ ]\+\) your \([^ ]\+\)/\2\1er/' < fail
于 2009-04-29T16:49:19.937 に答える