指定された文字を含まない結果を得るには、否定^を使用してください。

指定された文字を含まない結果を得るには、否定^を使用してください。

名前に以下が含まれていないファイルを探したいと思います。"^iX500"

$ cat note_list 
...
/Applications/ScanSnap Manual.localized/iX500ScanSnapManual.app/Contents/Resources/manual/basic/EN/ix500/images_mac/EvernoteMark.png
/Applications/ScanSnap 

頑張った

 cat note_list | grep -i "^iX500"
 #not return results

そして

$ cat note_list | egrep -i "^(iX500)"
#not return result

-v最後に、get it doneを使用します。

cat note_list | egrep -i -v "(iX500)"

^しかし、grepで否定をどのように使用できますか?

答え1

ファイル名に使用するときの問題は、行指向のツールであり、ファイル名に改行文字を含めることができることですgrepgrep

ファイル内のすべてのファイル名に改行文字がないと仮定すると、grep -v否定一致の意味を使用します。

grep -iF -v 'iX500' <note_list

-F正規表現ではなく一致する文字列なので、追加しました。

^[...]単一文字と一致させるために内部的に使用されます。いいえ特定のコレクションから。たとえば、[^a-z]小文字ではなく、指定された範囲の単一文字と一致します(標準POSIXロケールを想定)。他の場所で使用した場合の^文字列の先頭を示します。たとえば、^alpha文字列と一致します。alpha ただ行の先頭に(再び、alpha$行末の文字列にのみ一致します)

私の考えであなたが探しているのは、iX500「not」と一致する正規表現を作成することです。問題は、あなたの例では、ほとんどの文字列が一致することです。たとえば、Applications(例では2行)のビットは「not iX500」です。

以下は、文字を含まないすべての行を抽出しますX

grep '^[^X]*$'

Xあなたの場合は、「not」表現ではなく一致する正規表現を見つける必要があります。[^X]*ワイヤーしかし、どこにも単語が一致しませんiX500

GNUを使用してプレビュー/振り返る機能を持つPCRE式を使用してこれを実行することは可能ですが、最初にマッチングしてからマッチングを否定するという点ははるかにgrep簡単です。iX500-v

関連情報