Grepの正しいパターンを設定するには、助けが必要です。 pattern
のすべてのオカレンスを見つける必要があります。ここで、行持っている可能性がある先行スペース。例:次のファイル:
1. No pattern recognized.
2. Pattern to be recognized
3. Pattern to be recognized here also
4. pattern with only one leading space
行2、3、および4のみをgrepします。行番号は参照用です。
これまでのところ、私は次のことを試しました:
grep -i '^ [[:blank:]]pattern'
、ただし4行目のみを返します。
grep -i '[[:blank:]]pattern'
は1,3および4を返します。
grep -i '^[[:blank:]]pattern'
は1,3および4を返します。
-マイクP.S.これが適切なフォーラムでない場合は、それに応じてご案内ください。
2行目と3行目は大文字のPであり、0個以上のスペースが必要なので、次のことを正確に指定します。
$ grep '[[:blank:]]*Pattern' input.txt
Pattern to be recognized
Pattern to be recognized here also
個人的には、'[[:blank:]]Pattern.*recognized'
のような他の何かでパターンを拡張することをお勧めします
私が得たのは、行2のように先頭のスペースがまったくないか、1つ以上のスペースがあることです。これは、スペースが1つある行4を除外するためです。
だから私は提案する:
egrep -i '^\s*pattern' file.txt | grep -v '^\spattern'
または、単一のawk
を使用します。
awk 'tolower($0) ~ /^\s*pattern/ && !/^\spattern/ ' file.txt
\s
スペースとして、必要に応じてblank
で変更できます。egrep -i '^\s*pattern' file.txt
最初に、パターンの後に続くスペースの有無にかかわらず、すべての行を開始します。grep -v '^\spattern'
:次に、先頭のスペースが1つだけ含まれているものを除外します。上記の例は、番号付けのないファイルで機能します。ファイルに先頭の番号が含まれている場合は、これを使用します。
egrep -i '\s*pattern' file.txt | grep -v '\spattern'
またはawk
の場合:
awk 'tolower($0) ~ /\s*pattern/ && !/\spattern/ ' file.txt