パイプをgrepする方法|


14

パイプ文字を含む行|または文字をgrepするにはどうすればよいですか>

files content:
|this is test
where is >
this is none

今、私はgrepコマンドを使用して必要です

grep -iE "<some expression>" file_name

出力:

|this is test
where is >

回答:



6

GNU grepを使用している場合は、or演算子(|)でこれを行うことができます。これはエスケープする必要があります(バックスラッシュが前に付きます\)。そのため、パイプまたは大なり記号のいずれかを含む行を見つけるには、文字どおりor演算子でそれらを含めます。

grep '|\|>' infile

出力:

|this is test
where is >

4
\|標準ではありませんBRE、それはGNUで動作してもオペレータは、grepあるgrepLinuxカーネルを中心に構築されたほとんどのオペレーティングシステムで見つかりました。
ステファンシャゼル

@StephaneChazelas:これを指摘してくれてありがとう、私はそれを知らなかった。テキストを修正しました。
トール

1
はい、代替演算子はBREに対するEREの唯一の実際の追加であり、残り(+?)は\{1,\}andの構文糖です\{0,1\}。(一方、緩いのERE後方参照(上の\(.\)\1BREのみ機能している))
ステファンChazelas


0

これを実現する正しい方法は、POSIXで指定されている-eフラグを使用することです。例えば:

grep -e '>\||' infile

1
grep -e '>' -e '|' infileも動作します。
-ott--

2
-ePOSIXで指定されていますが、ここでは役に立ちません。\|POSIXでは指定されていません。
ステファンシャゼル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.