我有一个名为700-I20190808-0201
的内部版本。我需要将其转换为7.0.0-I20190808-0201
。我可以使用正则表达式来做到这一点:
sed 's/\([0-9]\)\([0-9]\)\([0-9]\)\(.\)/\1.\2.\3\4/' abc.txt
但是,当内部版本ID为7001-I20190809-0201时,该解决方案不起作用。我们能否使正则表达式动态化,使其同时适用于700和7001?
答案 0 :(得分:1)
请您尝试以下。
awk 'BEGIN{FS=OFS="-"}{gsub(/[0-9]/,"&.",$1);sub(/\.$/,"",$1)} 1' Input_file
答案 1 :(得分:1)
如果您有Perl可用,那么前瞻正则表达式将使这一过程变得简单:
$ cat foo.txt
700-I20190808-0201
7001-I20190809-0201
$ perl -ple 's/(\d)(?=\d+\-I)/\1./g' foo.txt
7.0.0-I20190808-0201
7.0.0.1-I20190809-0201
答案 2 :(得分:1)
您可以使用标签和使用sed的分支实现简单的循环:
$ echo '7001-I20190809-0201' | sed ':1; s/^\([0-9]\{1,\}\)\([0-9][-.]\)/\1.\2/; t1'
7.0.0.1-I20190809-0201
$ echo '700-I20190809-0201' | sed ':1; s/^\([0-9]\{1,\}\)\([0-9][-.]\)/\1.\2/; t1'
7.0.0-I20190809-0201
如果您的sed支持-E
标志:
sed -E ':1; s/^([0-9]+)([0-9][-.])/\1.\2/; t1'
答案 3 :(得分:-1)
sed -e 's/\([0-9]\)\([0-9]\)\([0-9]\)\(.\)/\1.\2.\3.\4/' -e 's/\.\-/\-/' abc.txt
这对我有用,非常简单。只需使用replaceregex模式将其提取到我的ant脚本中