2016-06-23 3 views
2

Bourneシェルで以下のコマンドを実行していますが、予期しないエラーが発生しました。RegEx with Back Reference-Unix

$ echo abcd 123 | grep --color '[a-z]*' 

Output(abcd is colored) : abcd 123 

$ echo abcd 123 | sed 's/\([a-z]*\)/\1/' 

Output : abcd 123 

2番目のコマンドの結果は、ABCDだけではないでしょうか?

答えて

1

いいえ、\([a-z]*\)abcd部分をキャプチャし、逆参照は\1の逆参照を再度挿入するためです。

キャプチャグループの後に文字列を使用.*の残りの部分を削除するには、次の文字は、文字列の先頭に来る場合は、

echo abcd 123 | sed 's/\([a-z]*\).*/\1/' 

パターンの開始時に^を追加します。

こちらはBash Ideone demo

+1

ありがとう、私は理解しました:) –