http://abc/blah/hhh/25927/3456/bb
http://vfg/blahgg/hhvvh/kkk/25927/2378/bb/mm
http://lah/hhh/25927/fff/bb/somthin
上記の行では、共通の数字は次のとおりです。25927いつもそのようなことが起こる/25927/すべての行に存在します。ところで、数字は私があらかじめ分からない変数なので、代わりに書くことはできず、そうしなければなりませんgrep 25927
。grep /commonnumber present in all lines/ file
ベストアンサー1
perl -nE '%a = map { $.==1 || $a{$_} ? ($_,1):()} /(\d+)/g;
END{ say keys %a}' file
説明する:
-n
プログラム全体にループが追加されます。たとえば、次のようになります。while (<>) { ... }
-E
Perlは(そのループ内で)コマンドラインを実行する必要があります。活用可能性も高まるsay
/(\d+)/g
各行は、各数字(互いに隣り合う数字)と一致する行に個別に渡されます。に入力すると、各数字がmap
。%a
これまで、すべての行に表示される数値辞書です。各行()が再計算されます%a = ...
。最初の行では、
$. == 1
すべての数字が辞書に格納されます。 (数字、1)ペアを追加すると、1はtrueを表します。()
他の行では、最後の反復にも表示されない限り、すべての数字がフィルタリングされます$a{$_} ?
。最後の
END{...}
印刷すべての行ですべての数字が繰り返される。