
もしそうなら、grep()でinverseを使用すると、egrep -v
実際に出力が逆さまに(反転)表示されることを意味しますか?
以下の例を見ると、さらに混乱していたと思います。
$ egrep -v '\ ' blah.sh
$ egrep -v '(\ )|^$' blah.sh
'\'の機能と-vを入力すると、何が起こるのか混乱します。また、 |^$ コマンドを除いて、 '\' コマンドと '(\ )' コマンドの違いは何ですか?
答え1
von Brandが言ったように、-v
このパターンと一致しない線を印刷することを意味します。これは例によって最もよく説明されています。というファイルがあり、foo.txt
その内容は次のようであるとしましょう。
aaa
bbb
aabb
grep
それでは、このファイルにいくつかの文字列を入力してみましょう。
$ egrep 'a' foo.txt ## print lines that contain 'a'
aaa
aabb
$ egrep -v 'a' foo.txt ## print lines that do not contain 'a'
bbb
今、あなたが投稿した特定の正規表現はそれ自体では意味がありません。どこで見つけることができますか?とにかく、多くの正規表現で\
脱出する次の文字「\」は、多くのシェルでスペースを入力する方法です。これはGNUを使用するためには必要ありませんが、grep
スペース'\ '
を見つけることを意味します。たとえば、
$ cat foo.txt
aaa
bb cc
$ grep '\ ' foo.txt
bb cc
$ grep ' ' foo.txt # same as the previous one, at least for GNU grep
bb cc
$ grep -v '\ ' foo.txt # print lines that do not contain spaces
aaa
|
^
文字列の先頭と$
末尾を一致させる論理ORを表します。したがって、\ |^$
少なくとも1つの空白または空白行を含むすべての行は一致します。
$ cat foo.txt
aaa
bbb
cc dd
$ egrep '\ |^$' foo.txt # print lines that are either empty, or have spaces
dd ee
$ egrep -v '\ |^$' foo.txt # print lines that are neither empty, nor have spaces
aaa
bbb
括弧を使用すると、パターンをキャプチャできます。
Back References and Subexpressions
The back-reference \n, where n is a single digit, matches the
substring previously matched by the nth parenthesized
subexpression of the regular expression.
公開した正規表現では役に立つことはありません。使用法の例は次のとおりです。
$ cat foo.txt
aaaa
aa bb
aabbccbb
$ egrep '(bb)..\1' foo.txt
aabbccbb
正規表現は、(bb)..\1
文字列bb
、任意の2文字()を一致させ、..
文字列を再一致させる()を意味します。bb
\1
答え2
grep pattern file(s)
次の行を表示マッチこれは、以下を実行する行を示していますpattern
。grep -v pattern file(s)
矛盾モデル。両方の出力を正しい順序でマージすると、file(s)
後者の結果が得られます。