ゲーム終了後に一部のキャラクターを削除する方法は?

ゲーム終了後に一部のキャラクターを削除する方法は?

次のサンプルコンテンツを含むファイルがあります。

NOF低下レベル= 96データ= 2018年1月3日水曜日04:37:32 2018:7E 1月3日水曜日04:37:32 2018:7E 1月3日水曜日04:37:32 2018:7E 2018 1月3日 04:37:32: 7E 1月3日水曜日 04:37:32 2018:7E 1月3日水曜日 04:37:32 2018:7E 1月3日水曜日 04:37:32 2018: 7E 2018年1月3日水曜日04:37:32:7E 1月3日水曜日04:37:32 2018:7E 1月3日水曜日04:37:32 2018:7E 1月3日水曜日04:37:32 2018:7E 1月3日水曜日 04:37:32 2018:7E 1月数 3 04:37:32 2018:
nof_received_data_packets

ファイルから日付と時刻を削除したいです。つまり、「2018年1月3日水曜日:XX:XX:XX」のすべてのインスタンスを削除したいと思います。したがって、shouldがn表示されるたびにWed文字が削除されることがあります。

どのように実装しますかsed

答え1

パターンを一致させます。

$ sed 's/Wed Jan 3 ..:..:.. 2018://g' FILE
NOF DOWN BITS = 96 data = 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 
nof_received_data_packets

おそらくもっと複雑な作成方法があるかもしれませんが、うまくいきます。

答え2

そしてアッ:

awk -v RS='[[:alpha:]]{3} [[:alpha:]]{3} [0-9]{1,2} ([0-9]{2}:?){3} [0-9]{4}:' \
    -v ORS='' '{print}'  datafile

NOF DOWN BITS = 96 data = 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 
nof_received_data_packets

これは、レコード区切り記号(RS)を日付と時刻の後に日付と時刻が続く文字列と一致する正規表現に設定し、出力レコード区切り文字:(ORS)を空に設定することによって行われます。

その後、各「レコード」を印刷します。

短い月名と短い曜日名が常に3文字で、日付形式が常にであると仮定すると、すべての日付と時刻で機能しますDay Month Daynum HH:MM:SS YYYY

そして sed:

sed -E 's/[[:alpha:]]{3} [[:alpha:]]{3} [0-9]{1,2} ([0-9]{2}:?){3} [0-9]{4}://g' \
  datafile

これは、正規表現と同じ日付一致を使用して、日付の後に時間が来るように見えるすべての項目を削除します:

そして真珠:

perl -p -e 's/\w{3} \w{3} \d{1,2} (\d{2}:?){3} \d{4}://g' datafile

Perl正規表現には、「単語」文字(\w)と数字(\d)を指定するいくつかの素晴らしいショートカットがあります。 PerlバージョンはUnicodeをサポートし、すべてのロケールで動作します。

3つのスクリプトはすべてかなり暴力的なスクリプトです。日付形式が上記の形式と異なる場合は、それ以上のエキゾチックなものを試す価値がないと思います。もしそうなら、Perlで何かを書いて、そのDate::Parseモジュールを使って各行から部分文字列を取り出すことができます。

sedバージョンにはGNUとGNUawkが必要であるか、少なくとも正規表現の繰り返し計算を理解するバージョンが必要です。sedawk{n,m}

関連情報