grep -oを使用して1行に複数の一致を検索して印刷する方法は?

grep -oを使用して1行に複数の一致を検索して印刷する方法は?

私はmkdocsインスタンスを持ち、ページの内部リンクを印刷するスクリプトを書いています。 1行に複数の一致がある場合、grepは一致のみを印刷できません。

これが私が現在持っているものです:

$ grep -Eon '\[([[:alpha:]]|[[:digit:]]|[[:space:]])*\]\((\/|\.).*\)' /path/to/file.md
10:[foo](../../relative_path/foobar.md) is the path to another file, also see [bar](/absolute/path/foobar.md)

出力が次のようになります。

10:[foo](../../relative_path/foobar.md)
10:[bar](/absolute/path/foobar.md)

grepやawk、sedなどの他のコマンドでこれを行う方法はありますか?

ベストアンサー1

grep -Pno "[[[:alnum:]]*]\(.*?\)" /path/to/file.md

それとももっと良いかもしれません(これは一致するかもしれません)。["foo別の単語"])

grep -Pno "\[([[:alnum:]]*[[:space:]]*)*?\]\(.*?\)"

-P=>貪欲ではないマッチングのためのPerl Regex?

または、欲しくない英数字とスペースのみが可能ですが、すべての文字方法

 grep -Pno "\[.*?\]\(.*?\)"

おすすめ記事