同じコマンドでgrep -v -e 'expr1'とgrep -e 'expr2'を実行する方法は?

同じコマンドでgrep -v -e 'expr1'とgrep -e 'expr2'を実行する方法は?

www.次に始まらず、次を含まない文字列を抽出するための次のコマンドがあります/

grep -v -e '^www\.' -e '/' test2.txt 

somestring.somestringただし、次のコマンドを使用して達成できる一致パターンに加えて、上記の内容が必要です。

grep -e '^[^\.]*\.[^\.]*$'

すべての書類を1行に入れる方法は?

ベストアンサー1

grep1 回の呼び出しで逆方向一致と順方向一致を組み合わせることはできません。

あなたはこれを行うことができますsed

sed -e '/^www\./d' -e '/\//d' -e '/^[^.]*\.[^.]*$/!d' ./*.txt

またはawksed一致するファイルの名前を印刷できるのとは反対grep):

awk -F. 'NF == 2 && !/^www\./ && !/\// {print FILENAME": "$0}' ./*.txt

ファイル名を印刷したくない場合は、2つのgrep呼び出しを使用してこれを実行できます。

cat ./*.txt | grep '^[^.]*\.[^.]*$' | grep -v -e / -e '^www\.'

catこれは、標準入力としてすべてのファイルの内容を提供するために使用されるため、最初のファイルはgrepファイル名を印刷しません。一部の実装では、複数のファイルがある場合はgrepファイル名の印刷をスキップする必要があります。grep -hファイル名が1つしかない場合、grepファイル名は印刷されず、リダイレクトを介して標準入力に供給できます。

<onefile.txt grep '^[^.]*\.[^.]*$' | grep -v -e / -e '^www\.'

これをサポートする場合は、PCREの(?!...)否定予測演算子を使用して否定を達成できます。grep-P

grep '^(?!www\.)(?!.*/)[^.]*\.[^.]*$' ./*.txt

ただし、ここでは次のようにすべての操作を実行できます-v

grep -v -e / -e '^www\.' -e '^[^.]*$' -e '\..*\.'

また、ポイントのない行と複数のポイントを含む行も除外されます。

おすすめ記事