
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