Bash/sedで値を変更する方法

Bash/sedで値を変更する方法

私のファイルには次のテキストがあります

http://mydomain.com/test.phtml
http://mydomain.com/classes/main.class.phtml
http://mydomain.com/scripts/filemanager/nl.phtml

これが必要です(sedを使用する必要があると思いますか?)

http://mydomain.com/mydirectory/test.php
http://mydomain.com/classes/mydirectory/main.class.php
http://mydomain.com/scripts/filemanager/mydirectory/nl.php

ベストアンサー1

sed 's/\([^/]*\)\.phtml$/mydirectory\/\1.php/' <filename>

必要に応じていただきます。 (オプションで-i内部交換にフラグを使用します。)


それを分解するには、まず

s/<regexp>/<replacement>/

<regexp>これにより、一致するコンテンツが置き換えられます<replacement>。次に正規表現を見てみましょう。

\([^/]*\)\.phtml$

まず、末尾から行末の文字列を\.phtml$探します。正規表現を行の末尾に固定し、ドットの前にバックスラッシュを追加してエスケープします。通常、ポイントは何でも一致するためです。.phtml$

その後、次は残ります。

\([^/]*\)

中央を見ると、[^/]文字([]角かっこ内の文字の1つと一致する)が一致します。この文字はスラッシュではなく任意の文字にすることができます。^負の一致が行われるので、^/「スラッシュを除く」角かっこ内に。右角かっこの後にアスタリスクがあります。*これは、角かっこ内の1つ以上の文字と一致することを意味します。

次に、上記の内容をラップする\(と、\)角かっこ内の一致をキャプチャして<replacement>セクションで使用できるs/<regexp>/<replacement>/ようになります。

その後、この<replacement>セクションには次のものがあります。

mydirectory\/\1.php/

一致する reexecp を最初に置き換えます。これはmydirectory/、sed置換の区切り文字として使用され、キャプチャされたテキストを最初のキャプチャグループに配置するために使用されるため、スラッシュに置き換える必要があります。次に、拡張子を追加します。終わり。/\1.php


/このすべてが合わされるということは、最後のものからまでのすべてをキャプチャし、最後のスラッシュの後に追加し、キャプチャした.phtmlテキストをmydirectory/書き換えてから.php拡張子を追加することを意味します。

おすすめ記事