Sed/awk 文本操作
Sed/awk text manipulation
我如何转换它:
RS.PK.03.01.4200.03.014.01
到 man03140101
?
需要做什么?
- 第 5 个“.”之前的文字必须删除:
RS.PK.03.01.4200.
- 应转换剩余文本
03.014.01
应转换为 031401
—“0
”已从“014
”中删除。
01
加在最后:03140101
- 在前面加上
man
:man03140101
我需要在一个文件中进行数百次这样的转换。
一种可能性,使用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
的新手,我建议您先阅读 BEGIN
、FS
、OFS
和 sub
.)
这可能适合您 (GNU sed):
sed -rn 's/.*\.(.*)\.0?(.*)\.(.*)$/man1/p'
此模式匹配最后三个 .
,并使用分组和反向引用来构建所需的字符串。请注意 man
和 01
被添加到反向引用 1、2 和 3 之前。另外,0
在反向引用编号 2 之前是可选的。
我如何转换它:
RS.PK.03.01.4200.03.014.01
到 man03140101
?
需要做什么?
- 第 5 个“.”之前的文字必须删除:
RS.PK.03.01.4200.
- 应转换剩余文本
03.014.01
应转换为031401
—“0
”已从“014
”中删除。 01
加在最后:03140101
- 在前面加上
man
:man03140101
我需要在一个文件中进行数百次这样的转换。
一种可能性,使用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
的新手,我建议您先阅读 BEGIN
、FS
、OFS
和 sub
.)
这可能适合您 (GNU sed):
sed -rn 's/.*\.(.*)\.0?(.*)\.(.*)$/man1/p'
此模式匹配最后三个 .
,并使用分组和反向引用来构建所需的字符串。请注意 man
和 01
被添加到反向引用 1、2 和 3 之前。另外,0
在反向引用编号 2 之前是可选的。