+とスペースを除く他のすべての文字を見つける方法

+とスペースを除く他のすべての文字を見つける方法

grepを使用して、+とスペースを除く他の文字を含む行を見つけようとします。

使ってみました。

grep [^+]

しかし、テキストファイルでテストすると、次のようになります。

++++++++
++++++++
+  ++ ++

3つの空行を返します。

-cオプションが3を返したので、スペースと改行を除外できると考えてみました。

grep -c [^+\ ]そしてgrep -c [^+\n\ ]

どちらもまだ私に3を与えます。

私も試しました

grep -v [+]

このコードは上記のテキストファイルで機能しますが、+と他の文字が混在する行を検出するにはまだこのコードが必要です。

たとえば、+1+++++検索に含める必要がありますが除外されます。

私は何を見逃していますか?

明確にするために、次のテキストファイルから:

++++++++
+  ++ ++
+1     +
abcd fgh
++++++++

私はそれを返したい

+1     +
abcd fgh

ベストアンサー1

あなたのパターンを引用してください!これはうまくいきます:

$ grep '[^+]' file
+  ++ ++

引用符を使用せずに(一致しないファイル)シェルで処理すると、ファイルは[^+]globスコープパターンとして解釈され、globと一致するファイル名を見ることができます。+grep

ほとんどのシェル実装では、^を[^[:space:]]などの範囲の否定文字として使用することもできます。 (渡す)

スペースも除外するには、[^+ ]次のパターンを使用します。

$ grep '[^+ ]' file2
+1     +
abcd fgh

以下を使用して、シェルがコマンドを解釈する方法を確認できますset -x

set -x
grep [^+] file

おすすめ記事