あるファイル内の別のファイルのランダム行の接頭辞であるすべての行を見つける方法はありますか?
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 )