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

相关内容