web-dev-qa-db-ja.com

これら2つのgrepステートメントを組み合わせる方法

空の行ではなく、//で始まらない行を選択する必要があります。次のように、2つの別々のgrepコマンドを実行できます。

空の行ではない行を抽出するには:

grep -v -E '^$' test.txt 

//で始まらない行を抽出するには:

grep -v '//' test.txt 

両方のコマンドを1つに組み合わせるにはどうすればよいですか?

2
None

これを試して、

 grep -ve '^$' -e '^//' file

男から:

-e PATTERN、-regexp = PATTERN

Use PATTERN as the pattern.  This can be used to specify multiple search patterns,

または拡張正規表現(-E)を使用する:

 grep -v -E '^($|//)' file

男から:

2つの正規表現は、中置演算子|;で結合できます。結果の正規表現は、いずれかの代替式に一致する任意の文字列に一致します。

7
Siva

このステートメントはすでに結合されています(後で説明するエラーがあります)。

grep -v -E '^$' | grep -v '//' test.txt

左から最初の部分(|まで)のみが空の行を除外します。最初のエラーは、右端のステートメントにtest.txtが指定されていることです。これは、両方のコマンドがこの入力で動作するように、すでに左端のステートメントに入力されているはずです。私はこれを意味します:

grep -v -E '^$' test.txt | grep -v '//'

2番目のエラーは、'//'定義が実際には'^//'である必要があることです。ここで、^は行の始まりを示します。すべて一緒に:

grep -v -E '^$' test.txt | grep -v '^//'

このようなgrepの使用の連鎖は、一般的な方法です。それらを1つのgrepプロセスにマージする方法については、他の回答を参照してください。

2
user147505

したがって、//以外の文字で始まる行が必要です。

grep -E '^([^/]|.[^/])' file
1
Ed Morton