Sed/awk 文本操作

Sed/awk text manipulation

我如何转换它:

RS.PK.03.01.4200.03.014.01man03140101

需要做什么?

我需要在一个文件中进行数百次这样的转换。

一种可能性,使用awk

awk -F. '{ printf "man%.2d%.2d%.2d01\n", , ,  }'

输出:

$ echo RS.PK.03.01.4200.03.014.01 |  awk -F. '{ printf "man%.2d%.2d%.2d01\n", , ,  }'
man03140101
$

您的要求在几个方面尚不清楚,但以下内容符合您的要求,至少应该让您接近目的地:

awk -F. '{sub(/^0/,"",);          #  "0" was removed from "014"
   print "man"    "01" }'

(如果您是 awk 的新手,我建议您先阅读 BEGINFSOFSsub.)

这可能适合您 (GNU sed):

sed -rn 's/.*\.(.*)\.0?(.*)\.(.*)$/man1/p'

此模式匹配最后三个 .,并使用分组和反向引用来构建所需的字符串。请注意 man01 被添加到反向引用 1、2 和 3 之前。另外,0 在反向引用编号 2 之前是可选的。