私のファイルには次のテキストがあります
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
拡張子を追加することを意味します。