2016-10-07 6 views
0

私はgrepgrep -vの検索を結合しようとしています。 出力は.xmlで終わるすべての行を表示するが、$で始まる行は除外する必要があります。grepとgrep -vを組み合わせて検索

私が試したコマンドは次のとおりです。どれも働いた:

  • grep *.xml file1.txt | grep -v '$' file1.txt > output 
    
  • grep *.xml | grep -v '$' file1.txt > output 
    
  • grep *.xml grep -v '$' file1.txt > output 
    
  • grep *.xml '$' file1.txt > output 
    

答えて

0

あなたが試すことができます。

grep "^[^$]*.xml$" file1.txt

これは、$で始まり、行の先頭に$を一致させるには.xml

+2

これは 'a $ .xml'で失敗します。それは 'grep"^[^ $]。* \。xml $ "file1.txt'でなければなりません。そうでなければ私の答えは –

6

で終わらない行を返す^を行の先頭にそれを固定する必要があります。また、$はそれ自身で行の末尾に一致します(それは特別な文字です、^のように)、*はあなたの考えをしません(正規表現ではシェルグロブパターンとは異なります)。だから、

grep -v '^\$' 

$で始まるすべての行を除外します。

あなたはどちらか

grep '\.xml$' file1.txt | grep -v '^\$' 

または

grep '^[^$].*\.xml$' file1.txt 

$で始まらないファイル file1.txt内のすべての行を見つけるために行うことができますが、それは .xmlで終わります。私はまた、そのよう .xmlドットを逃れる

通知は、そうでなければ、任意の文字にマッチし、そして第2のコマンドは$.*マッチ任意の数の任意の文字を除くすべての文字を含む文字範囲([ ... ])を使用して、両方の基準を組み合わせること)。

シェルが正規表現をシェルグロビングパターンとして解釈しないように、単一引用符が必要です。

-1

"cat"コマンドを使用して出力をファイルに出力する必要があります。

正規表現を使用してキーワードをフィルタリングします。この場合、すべての行は$ symbolで始まり​​ます。 '^ [$]'です。

したがって、コマンドcat *.xml | grep -v '^[$]'を使用できます。

+0

です。これには 'cat'は必要ありません。 'grep -v '^ [$]' * .xml'を使ってください。プラスは '.xml'で終わる行を求めました。 –

関連する問題