基于模式匹配的单独数值

时间:2017-07-12 14:10:23

标签: regex bash unix awk sed

我需要将90s值中的100s值分开... sed可能不是完成此操作的最佳方法,但无论如何,我试图通过在两个数字之间插入一个空格来将90s与100分开。

代码:

sed 's/1[0-9][0-9]/ 1[0-9][0-9]/g' file

数据文件:

99100 93 96 95 94 93 96 98100

当前结果:

99 1[0-9][0-9] 93 96 95 94 93 96 98 1[0-9][0-9]

预期结果:

99 100 93 96 95 94 93 96 98 100

2 个答案:

答案 0 :(得分:1)

您可以用&替换整场比赛:

s='99100 93 96 95 94 93 96 98100'
echo $s | sed 's/1[0-9][0-9]/ &/g'

请参阅online demo,结果:99 100 93 96 95 94 93 96 98 100

请参阅sed reference

  

此外,替换可以包含未转义的&字符,这些字符引用模式空间的整个匹配部分。

答案 1 :(得分:1)

gawk 解决方案:

awk -v FPAT='9[0-9]|1[0-9][0-9]' '{ r=$1; for(i=2;i<=NF;i++) r=r FS $i; print r }' file

输出:

99 100 93 96 95 94 93 96 98 100
  • -v FPAT='9[0-9]|1[0-9][0-9]' - 模式定义字段值(90s或100s)

  • r=$1 - 将第一个字段捕获为初始字段

  • for(i=2;i<=NF;i++) - 遍历其余字段