替换 UNIX 中特定模式之间的文本

替换 UNIX 中特定模式之间的文本

我想用“:”模式替换文件中的毫秒字段为“。”图案。

Input:-
Jun 12 2018  3:33:49:000PM
Jun 12 2018  3:33:49:850AM

Desired Output:-
Jun 12 2018  3:33:49.000PM
Jun 12 2018  3:33:49.850AM

我已经从我这边尝试了下面的 Sed 命令,但没有得到 100% 的结果,下面是我的 SED 命令:-

cat input.txt | sed 's/\(|\|^\|[A-Z]\)\([^|\]*\):\([0-9]\+\)\(AM\|PM\)\(|\|$\)/\1\2.\3 \4\5/g;s/"/ /g;s/:000/.000 /g' >output.txt

答案1

尝试:

sed -E 's/:([0-9]+[AP]M$)/.\1/'

我没有试图找出你的正则表达式出了什么问题,但就我个人而言,除非你必须这样做,否则我不会费心去匹配行的开头。只匹配行尾也应该更快。

答案2

最后,您想用点替换第三个冒号:

sed 's/:/./3' input.txt

答案3

我尝试过下面的 sed 命令,它解决了我的目的

sed -e 's/([AZ][az]{2}[ ]{1,2}[0-9]{1,2}[ ]{1,2}[0-9]{4}[ ] {1,2}[0-9]{1,2}:[0-9]{2}:[0-9]{2}):([0-9]{3}[A,P]M )/\1.\2/g'

相关内容