我有一个文件 ( 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
(此处仅作用于第一个字段)。