いくつかのメモ:
grep -Pperl互換のコンパイル済みライブラリ (perl ではなく C で記述) である libpcre を使用します。
- ファイル名にスペースがあると、コマンドは機能しませ
awkん
このsedコマンドは少しうまく機能します:
sed '/^.L......... /!d; s///; / -> .*/!d; s///'
これにより、最初の正規表現に一致しないすべての行が削除され、残りの行の一致する部分が削除されます。次に、2 番目の正規表現についても同じことが行われ、テキストが途中に残ります。regexps はgreedyであるため、2 番目の正規表現はeven even you wanteda -> b -> cに変わるため、これも完全な解決策ではありません。aa -> b
おそらくperl直接使用できます(libpcreライブラリなしでコンパイルされたシステムを使用しているgrepため、実行できないと思います-Pが、おそらくまだアクセスできますperl):
perl -ne '/^.L.........\s(.*)\s->\s/ and print "$1\n"'
今回は、貪欲さが有利に働き (正規表現は左から右に評価されます)、シンボリック リンクされた という名前のファイルを正しく抽出しa -> bますc。
GNUsed (ほぼすべての Linux システム) を使用している場合は、そのロジックを模倣できます。
sed '/^.L.........\s\(.*\)\s->\s.*/!d; s//\1/'
しかし、私はあなたの質問に技術的に答えていませgrepん-P。 基本および拡張 POSIX 正規表現(BRE および ERE)grepを使用します。EREでさえ、あなたが探していることを行うことはできません。したがって、簡単な答えは、. 複数のコマンドでそれを実行できるかもしれませんが、それは非常に醜いものであり、ルックアラウンドまたはテキスト置換なしでは実際には実行できないと言いたいのですが、どちらもBREまたはEREでは利用できません.grep-Pgrep