あるファイル内の別のファイルの行の前にあるすべての行を探します。

あるファイル内の別のファイルの行の前にあるすべての行を探します。

あるファイル内の別のファイルのランダム行の接頭辞であるすべての行を見つける方法はありますか?

grep単一のパターンがどの行の前に付いているかを確認するには、Iを使用します。たとえば、file1次のような場合

1
2
3

そしてfile2

100
10
25
55

grep '^1' file2私に与える

100
10

file1行を繰り返して、これが行のプレフィックスであることを確認する方法はありますかfile2?この場合、file1出力でプレフィックスを確認すると次のようになります。file2

100
10
25

答え1

file1正しい正規表現のリストに置き換えてください。

sed 's/^/^/' file1 >patterns

これは^各行の最初の文字としてaを挿入します。

その後、grep他のファイルと一緒に使用します。

grep -f patterns file2

テスト:

$ sed 's/^/^/' file1 >patterns
$ cat patterns
^1
^2
^3
$ grep -f patterns file2
100
10
25

一時スキーマファイルなし:

プロセス置換を理解するシェルを使用してください。

grep -f <( sed 's/^/^/' file1 ) file2

プロセス置換のないシェルでは:

sed 's/^/^/' file1 | grep -f /dev/stdin file2

シェルのプロセスリダイレクト機能を使用しますyash(同じ使用)通事論上記の手順的置換と同じですが、意味が異なります):

grep -f /dev/stdin file2 <( sed 's/^/^/' file1 )

関連情報