1. ホーム
  2. sed

[解決済み] スラッシュを含む文字列をsedで挿入するには?重複

2022-04-22 04:02:25

質問

私はローカルで開発されたVisual Studioプロジェクトを持っています。コードファイルをリモートサーバーにデプロイする必要があります。唯一の問題は、そこに含まれるURLで、これはハードコーディングされています。

このプロジェクトには、次のような URL が含まれています。 ?page=one . サーバー上でリンクが有効であるためには、そのリンクが /page/one .

デプロイ前にコードファイル内のURLをすべてsedで置き換えることにしたのですが、スラッシュで行き詰っています。

これはきれいな解決策ではないことは分かっていますが、単純で、私の時間を大幅に節約することができます。私が置き換えなければならない文字列の総数は10未満です。チェックする必要があるファイルの総数は、~30です。

以下、私の状況を説明する例です。

使っているコマンド

sed -f replace.txt < a.txt > b.txt

replace.txt で、すべての文字列が含まれています。

s/?page=one&/pageone/g
s/?page=two&/pagetwo/g
s/?page=three&/pagethree/g

a.txt :

?page=one&
?page=two&
?page=three&

の内容 b.txt sedコマンドを実行した後。

pageone
pagetwo
pagethree

欲しいもの b.txt を含むようにします。

/page/one
/page/two
/page/three

解決方法は?

最も簡単な方法は、検索/置換の行で別のデリミタを使用することです、例えば、。

s:?page=one&:pageone:g

どちらの文字列にも属さない任意の文字をデリミタとして使用することができます。あるいは、バックスラッシュでエスケープすることもできます。

s/\//foo/

を置き換えることができます。 /foo . 置換文字列にどんな文字が含まれるかわからない場合(シェル変数の場合など)には、エスケープされたバックスラッシュを使いたいところです。