次の内容を含むテキストファイルがあります。
yyyy-mm-dd, 12:34/s-show/...
yyyy-mm-dd, 13:24/s-show/...
yyyy-mm-dd, 14:32/s-show/...
yyyy-mm-dd/s-show
次に、各行の/ s-show / ...の前の部分文字列を次のような別の文字列に置き換えたいと思います。
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
これがどのように可能ですか?
ベストアンサー1
努力する:
$ sed -E 's@.*(/s-show)@https://www.testpage.com\1@' File
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show
現在の場所でファイルを変更するには:
sed -Ei 's@.*(/s-show)@https://www.testpage.com\1@' File # GNU (Linux)
または:
sed -Ei '' 's@.*(/s-show)@https://www.testpage.com\1@' File # BSD (MacOS)
仕組み:
-E
sedに拡張正規表現を使用するように指示します。これにより、特定のエスケープ文字が不要になります。s@old@new@
正規表現を見つけてold
置き換える代替コマンドですnew
。この例では、
old
isは.*(/s-show)
任意の数のすべての文字と一致し、.*
その後に/s-show
whereが/s-show
グループ1として保存されます。この例では、グループ1に置き換え
new
られています。https://www.testpage.com\1
\1