grepを使用してある.txt文書の行が別の文書に表示されるかどうかを比較するにはどうすればよいですか?
また、逆のケースを見つけるためにgrepをどのように使用しますか?それはできますかgrep -v
?
答え1
grep -F -f inner_file outer_file
マニュアルのパラメータ説明GNU grep:
-F
、--fixed-strings
パターンを改行文字で区切られた固定文字列のリストとして解釈し、どの文字列も一致します。 (
-F
POSIXで指定)
-f file
、--file=file
1行に1つずつファイルからパターンを取得します。空のファイルにはパターンが0個含まれているため、一致するものはありません。 (
-f
POSIXで指定)
次のオプションも使用できます-x
。
-x
、--line-regexp
行全体と正確に一致する一致のみを選択します。 (
-x
POSIXで指定)
-v
反対の結果を調べるオプションを追加します。
-v
、--invert-match
一致しない行を選択するには、一致の意味を逆にします。 (
-v
POSIXで指定)
クイックテストにはBashシェルを使用してください。
# grep -F -f <(printf 'A\nZ\n') <(printf 'A\nB\nC\n')
A
# echo $?
0
# grep -F -f <(printf 'A\nZ\n') <(printf 'B\nC\n')
# echo $?
1
# grep -v -F -f <(printf 'A\nZ\n') <(printf 'B\nC\n')
B
C
# echo $?
0
# grep -x -F -f <(printf 'A\nZ\n') <(printf 'AA\nBB\nCC\n')
# echo $?
1
答え2
あなたのようなものをテストしたところ、次の結論に達しました。
cat sampleOne.txt | cat sampleTwo.txt | grep <pattern>
たとえば、テキストファイルに次の内容を書きました。
This is a test.
1111
2222
私が具体的に「これはテストです」を見つけるとき、私は以下を使用しました。
cat *.txt | grep "This is a test."
This is a test.
This is a test.
または
cat sampleOne.txt && cat sampleTwo.txt | grep "This is a test."
結果:
This is a test.
11111
22222
This is a test.
でも
cat sampleOne.txt | cat sampleTwo.txt | grep "This is a test"
これは私に次のことを与えます:
This is a test.
もちろん、このコマンドはgrep -v pattern
探しているパターンとは反対のパターンを探します。例えば
cat *.txt | grep -v "This is a test."
私に与えるでしょう:
11111
22222
11111
22222