替换行中第四次出现的正则表达式

替换行中第四次出现的正则表达式

这是我现在的输出。如何从输入转到输出?

输入:

1.2.3.4.5
2.3.4.5.6

输出:

1.2.3.4-5
2.3.4.5-6

奖励:我已经完成了脚本的其余 80%,但这是我的理想输出。有没有一种超级简单的方法可以做到这一点?

输入:

1.2.3.4-1.2.3.10

输出:

1.2.3.4-10

答案1

awk

awk -F '[-.]' '{printf "%s.%s.%s.%s-%s\n", $1, $2, $3, $4, $NF}'

因为看起来您希望输入中的字段 1-4 和最后一个字段用 或 分隔.-并且输出格式化为除最后一个字段之外的所有字段,并用 分隔.

更简洁地说:

awk -F '[-.]' -v OFS=. '{$4 = $4"-"$NF; NF=4}1'
  • 将最后一个字段添加到第四个字段,并将字段数设置为 4。

答案2

第一部分:

$ sed 's/\./-/4' file.txt

将第 4 次出现的 替换.-


对于您的奖金部分:

sed -r 's/(.*)-.*\.(.*)$/\1-\2/' file.txt

输入:

1.2.3.4-1.2.3.10

输出:

1.2.3.4-10

答案3

我们可以使用 sed 进行贪婪匹配分组,如下所示:

$ sed -r 's/(.*)\.(.*)$/\1-\2/' input.txt                                
1.2.3.4-5
2.3.4.5-6

对于 perl 来说也是同样的想法:

$ perl -pe's/(.*)\.(.*)$/\1-\2/' input.txt                               
1.2.3.4-5
2.3.4.5-6

但是我们可以在 awk 中尝试使用.列分隔符:

$ awk -F '.' 'BEGIN{OFS=FS}{$NF=-$NF;sub(/\.-/,"-");print}' input.txt        
1.2.3.4-5
2.3.4.5-6

相关内容