個人ルールに従ってテキストファイルを編集する

個人ルールに従ってテキストファイルを編集する

特定のテキストファイルを編集したいです。

dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy,/s-show/...

ここで、/s-show/ は各行にあり、その後にランダムな文字「...」が続きます。

2つの状況があります。

  1. 1行は「dd.mm.yyyy」形式の日付で始まり、コンマとスペース、「hh:mm」形式の時刻、最後に/ s-show / ...を順番に入力します。

  2. 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/...

おすすめ記事