0

[20 を含む文字列を選択する sed スクリプトを作成しています。

私が使用しているコマンドは次のとおりです。

sed -n "/\[20/p" "C:\test_scripts\new1.txt"

これは mks ツールキットの sed で動作しています。ただし、Cygwin の sed でこれを使用しようとすると、次のエラーが発生します。

sed: -e expression #1, char 6: unterminated address regex

4

1 に答える 1

2

診断

推測では、Cygwin シェルはsedスクリプト内のバックスラッシュを削除しているため、sedコマンドは/[20/p表示されているエラー メッセージを生成する必要があることを認識しています。次のいずれかを使用して、これを確認できます。

set -x
sed -n "/\[20/p" ...
set +x

または:

echo sed -n "/\[20/p" ...

これらは、sedプログラムが見ているものを示しているはずです (set -x表記は、引数全体を一重引用符で囲む場合があります)。

直し方?

いくつかの可能性があり、そのほとんどが機能するはずです:

  • sed -n '/\[20/p' ...
  • sed -n "/\\[20/p' ...
  • ファイル ( sed.script) を編集して/\[20/p(1 行) を含め、次を実行します。sed -n -f sed.script ...

シェルは、一重引用符内の素材をいじってはいけません。バックスラッシュを 2 倍にすることは、バックスラッシュがなくなるという問題に対処する従来の方法です。他のいずれかが機能する場合、sedスクリプトファイルを使用することはコンテキスト内でやり過ぎですが、シェルがsedスクリプトの内容を台無しにすることも防ぎます。

于 2012-06-04T14:12:18.673 に答える