sed/awk は一致後に特定の位置の文字を削除します

sed/awk は一致後に特定の位置の文字を削除します

私は awk または sed のソリューションを探していますが、どちらも得意ではありません。これを入力し始めたときに出てきた提案はすべて読みました。

データ行を含むファイルがあります:

name
 thisdate=Sep  2 23:59:59 2022 GMT
name
 thisdate=Sep 15 23:59:59 2022 GMT

名前と日付/時刻はすべて異なり、曜日番号は常に同じ場所にあり、常に同じ文字数 (2) を占め、時間/分/秒は常に行の同じ位置にあり、すべての行にあるわけではなく、thisdate常に将来の日付であり、空白行はありません。

私は、キーオフ thisdate=( の前のスペースthisdate)して、位置 18 から 26 までの文字を削除することで、これらの日付行から時間を削除しようとしています(正しく数えた場合)。

私はいくつかのことを試しましたが、主に自分のニーズに合ったものを探して、正しい方向に導いてくれるものを探していました。

  952  sed 's/^\(.\{18\}\)\(.\{26\}\)/\1/' file  <--this may not have worked as I didn't key on a match?
  958  sed -i 's/thisdate=(.{11})18/\26/' file
  959  sed -i 's/thisdate=(.{10})17/\25/' file

何か見落としていると思いますが、誰かが私に正しい方向を指し示してくれるとありがたいです!

答え1

6 文字目以降の 9 文字を削除するだけで十分なようです thisdate=:

sed 's/^\( thisdate=.\{6\}\).\{9\}/\1/' file

与えられたデータに対して、これは生成されます

name
 thisdate=Sep  2 2022 GMT
name
 thisdate=Sep 15 2022 GMT

関連情報