替换分隔文件中字段中的日期值

替换分隔文件中字段中的日期值

我有一个文件 ( ph.lst),其中包含以下记录。我需要删除后面的数字.txt。该数字是随机生成的,因此我们不能期望始终相同。

test_wkly_20200428010453_PD.txt.1589553864|test_wky|05-01-2020 16:07:53|35858

我想删除.1589553864,我的输出应该是

test_wkly_20200428010453_PD.txt|test_wky|05-01-2020 16:07:53|35858

我努力了 sed -i 's/\.[0-9]$*//' ph.lst

请帮忙

答案1

尝试这个sed命令:

sed -i 's/txt\.[0-9]*/txt/' ph.lst

将后面的任意数量的数字替换txt.txt

答案2

你说你已经尝试过的命令,

sed -i 's/\.[0-9]$*//' ph.lst

只是一个微小的有点不对。会$匹配行尾,但这不是您想要在该点匹配的内容。相反,使用

sed 's/\.[0-9]*//' ph.lst

或者,

sed 's/\.[[:digit:]]*//' ph.lst

这将删除每行输入中第一个点(和点)之后直接出现的每个数字。输出将写入标准输出,因此您可以将其重定向到新文件中。

有了awk,你就会做同样的事情

awk -F '|' 'BEGIN { OFS=FS } { sub("\.[[:digit:]]*", "", $1) }; 1' ph.lst

ph.lst这会解析as分隔字段的行|,并使用与 with 相同的正则表达式删除子字符串sed(此处仅作用于第一个字段)。

相关内容