2009-08-24 18 views
0

正規表現:なぜこの正規表現は機能しませんか?

^ *x *\=.*$ 

「はその後、スペースの任意の数続くスペースの任意の数、等号して、行の終わりに何までが先行リテラルXと一致」を意味します。 Sedは次のように呼び出されました。

sed -r -e 's|^ *x *\=.*$||g' file 

ただし、一致するものはありません。正規表現の何が問題なのですか?

すべて:回答と努力のおかげで!入力ファイルにタブの問題があり、スペース指定子 ''と一致していないと思われます。ただし、現在のタブに関係なく、\sのソリューションが動作します!

+0

使用4つのスペース、または固定幅フォント –

答えて

5
^\s*x\s*=.*$ 

多分、いくつかの文字をエスケープして、それを1つずつ理解する必要があります。

がところで:正規表現のタグが実際に3つの要件が必要です:

入力文字列が何であるかを、出力文字列と、お使いのプラットフォーム/言語ものです。

+0

ため' backticks'を使用\ s * =。* $ '(*"任意の数のスペースが先行するリテラルx "をカバーする*)。 –

+0

うん、訂正ありがとう! – iElectric

+1

この行の入力文字列は何ですか、出力文字列とプラットフォームは何ですか? – paan

0

またはおそらく'^[ ]*x[ ]*='。もう少し互換性はありますが、タブなどとは一致しません。グループを必要としない場合、残りの部分についてはどうして迷惑でしょうか?

+0

バッククォートを使用してコードをフォーマットしてください。 – tonfa

0

sedは、ファイルを行単位で処理し、それぞれに対して指定されたプログラムを実行します。何をしたいん最も簡単なプログラムは、「/^ *x *=.*$/

sed -re '/^ *x *=.*$/!d' file 
  • あるパターンに一致する各行を選択します。
  • "!"は結果を否定します。
  • "d"は行を削除します。

sedデフォルトでは、特に断りのない限り、すべての行を印刷します。これにより、パターンに一致する行が効果的に印刷されます。それを書くの

1つの代替の方法は次のとおりです。

sed -rne '/^ *x *=.*$/p' file 
  • /^ *x *=.*$/は」パターンに一致する各行を選択します。
  • "p"は行を出力します。

ここでの違いは、「-n」スイッチを使用して行の自動印刷を抑制し、選択した行のみを印刷することです。

ます。また、この作業のために、「 grep」を使用することができ

:私はあなたがそれが `^ \ sの*のXになりたいと思うフォーマットコードに

grep -E '^ *x *=.*$' file 
関連する問題