Sed / awk文本操作

时间:2016-02-19 05:01:42

标签: awk sed text-manipulation

我该如何转换:

RS.PK.03.01.4200.03.014.01man03140101

需要做什么?

  • 5号之前的文字“。”必须删除:RS.PK.03.01.4200.
  • 应转换剩余文本03.014.01应转换为031401 - “0”已从“014”中删除。
  • 01添加到最后:03140101
  • 在前面添加manman03140101

我需要在文件中进行数百次此类转换。

3 个答案:

答案 0 :(得分:4)

一种可能性,使用awk

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

输出:

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

答案 1 :(得分:1)

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

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

(如果您是awk的新用户,我建议您先阅读BEGINFSOFSsub。 )

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -rn 's/.*\.(.*)\.0?(.*)\.(.*)$/man\1\2\301/p'

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