特定のテキストファイルを編集したいです。
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy,/s-show/...
ここで、/s-show/ は各行にあり、その後にランダムな文字「...」が続きます。
2つの状況があります。
1行は「dd.mm.yyyy」形式の日付で始まり、コンマとスペース、「hh:mm」形式の時刻、最後に/ s-show / ...を順番に入力します。
1行は日付だけで始まり、その後にカンマが続き、すぐに/s-show/...が続きます。
各行は次のように編集する必要があります。
最初の場合はhh:mmの後にスペースを3つ入力し(行が日付と時刻で始まる場合)、2番目の場合はカンマの後にスペースを3つ入力し(結果が日付で始まる場合)、同じ文字列を追加します。 /s-show/ 前の https://www.test.com"
/s-show/はリンクの一部であり、左側の「https://www.test.com」で補完されなければ有効なリンクになります。
したがって、各行の結果は次のようになります。
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, https:/www.test.com/s-show/...
これがどのように可能ですか?追加の利点は、リンクが同じ場所で開始されることです。したがって、最初のケースでは3行、2番目のケースでは9行です。
ベストアンサー1
この回答では、日付(および時間)の後のテキストが常に固定文字列で始まると仮定します/s-show/
。
sed -e 's#^\([^/]\{17\}\)\(/s-show/\)#\1 https:/www.test.com\2#' -e 's#^\([^/]\{11\}\)\(/s-show/\)#\1 https:/www.test.com\2#' inputfile > outputfile
説明する:
スクリプトは日付や時刻を確認せず、/
行の先頭とは異なる17文字(または11文字)が必要で、キャプチャされた/s-show/
グループ間に必要な数のスペースを挿入します。https:/www.test.com
注:sed
置換()コマンドは、パターン内のスラッシュがエスケープされるのを防ぐために、一般的な区切り文字の代わりにs
区切り文字を使用します。#
/
テスト:
echo 'dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy,/s-show/...' | sed -e 's#^\([^/]\{17\}\)\(/s-show/\)#\1 https:/www.test.com\2#' -e 's#^\([^/]\{11\}\)\(/s-show/\)#\1 https:/www.test.com\2#'
印刷
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, https:/www.test.com/s-show/...