マークダウンリンクのURLを編集

マークダウンリンクのURLを編集

マークダウンファイルを修正しようとしています。ファイルにはこのようなリンクがたくさんあります。

[string one](/stringtwo/#stringthree)

私はそれらを次のように変更したいと思います:

[string one](stringtwo.html#stringthree)

スラッシュを削除して.html

私は以下を試しました:

sed -i 's/](\(\/.*\)#/](\1.html#/g' file

しかし帰ってきた[global configuration](/config/.html#globals)。スラッシュは削除されません。

bashまたはを使用してどのようにこれを達成できますかsed

ベストアンサー1

これはトリックを行うようです

$ cat 725364.in
[string one](/stringtwo/#stringthree)
[example label](/path/to/doc/#anchor)
$  sed 's_\(\[[^]]*]\)(/\([^#]*\)/\(#[^)]*\))_\1(\2.html\3)_g' 725364.in
[string one](stringtwo.html#stringthree)
[example label](path/to/doc.html#anchor)

それを破壊する:

まず、リテラルsの脱出を避けるためにsoの代わりにs_needle_pin_flagsforを使用します。seds/needle/pin/flags/

sed検索はこの式を使用して実行され、\(\[[^]]*]\)(/\([^#]*\)/\(#[^)]*\))次のように分類されます。

  • \(\[[^]]*]\)- グループ1の定義(リンクタグ):
    • 文字通りの意味[
    • その後は0個以上]
    • 文字通りの意味が続く。]
  • (/- 文字通りの意味(/
  • \([^#]*\)- グループ2の定義(URL):
    • 0個以上の非リテラルコンテンツ#
  • /- 文字通りの意味/
  • \(#[^)]*\)- グループ3(アンカー)の定義:
    • 文字通りの意味#
    • その後、ゼロ以上のテキスト以外のコンテンツが続きます。)
  • )- 文字通りの意味)

以下を使用して変換します\1(\2.html\3)

  • グループ1の試合に続き
  • (、続いて
  • グループ2の試合に続き
  • .html、続いて
  • グループ3試合後
  • )

おすすめ記事