Web アドレスのすべてのスラッシュを置き換えたいです。
住所の例:https://example.com/sub/folder/files/file.txt
期待される結果:example.com-サブフォルダ-ファイル-ファイル.txt
https を削除することはできますが、残りのスラッシュを次のように置き換えることはできないようです。
echo $(echo 'https://example.com/sub/folder/files/file.txt' | sed 's/http[s]*:\/\///')
上記からわかることはこれだけです:
example.com/sub/folder/files/file.txt
スラッシュを置き換えるために 2 番目の sed を追加すると、最初に検出されたスラッシュのみが削除されます。何が間違っているのでしょうか?
答え1
これを試して:
echo "https://www.example.com/sub/folder/files/file.txt" | sed -e 's#http[s]://##' -e 's#/#-#g'
結果は次のようになります: www.example.com-sub-folder-files-file.txt
最初に見つかったものだけが置き換えられる理由は、sed に渡される最後の「パラメータ」として g が欠落していたためです。g はグローバルを表し、見つかったすべてのインスタンスを目的の置換で置き換えます。g がない場合、最初に見つかったインスタンスだけが置き換えられます。
また、sed コマンドのパラメータは任意の記号で区切ることができることにも注意してください。'/' である必要はありません。検索と置換にまったく関係のない記号を使用することをお勧めします。そうすることで、エスケープ文字について考えすぎたり、/ を置換するときにバグが発生する可能性がなくなります。
また、 -e オプションを使用して sed でいくつかのコマンドを連結することもできます。上記のように、「https://」を何もない状態に置き換え (削除)、「/」をすべて「-」に置き換えました。簡単です。
お役に立てれば幸いです
答え2
二重は必要ありませんecho
。
何を言っているのか分かりませんスラッシュを置き換えるために 2 番目の sed を追加すると、最初に検出されたスラッシュのみが削除されます。- この例ではコマンドが 1 つしかありません。 次のように 2 つのコマンドsed
で簡単に目的を達成できます。sed
echo 'https://example.com/sub/folder/files/file.txt' | sed 's,http[s]*:\/\/,,;s,/,-,g'