![sed/awk 匹配后删除特定位置的字符](https://linux22.com/image/171050/sed%2Fawk%20%E5%8C%B9%E9%85%8D%E5%90%8E%E5%88%A0%E9%99%A4%E7%89%B9%E5%AE%9A%E4%BD%8D%E7%BD%AE%E7%9A%84%E5%AD%97%E7%AC%A6.png)
我正在寻找 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