如何在Unix sed命令中使用RegEx匹配特定字符之前或之后的整数?

时间:2014-10-18 17:25:00

标签: regex bash unix sed

如何使用RegEx在Unix sed命令中匹配特定字符之前或之后的整数?

假设我们有一个sed-numbers文件:

cat sed-numbers 
(1, 2)
(4, 5)
(2, 3)

现在我可以使用sed将(x, y)切换为(y, x),但我不知道如何在没有选择字符(的情况下选择第一个整数,所以,我必须添加一个{模式(前面的{1}}字符可以完成任务:

\2

我的切换模式中是否有任何方法可以切换而不添加sed 's/^(\([0-9]*\), \([0-9]*\)/(\2, \1/' sed-numbers (2, 1) (5, 4) (3, 2) ?换句话说,我可以使用RegEx仅选择第一个整数,它必须在(之后而不是选择(吗?

其他问题: 如果第一个数字是整数且数据格式为:

,我们只需要切换位置
(+integer

1 个答案:

答案 0 :(得分:0)

如果输入的格式与问题中提到的格式完全相同,那么您可以使用下面的sed commnad,

$ sed 's/\([0-9]*\), \([0-9]*\)/\2, \1/' file
(2, 1)
(5, 4)
(3, 2)

你可以使用lookbehind和lookahead,

简单地通过Perl完成
$ perl -pe 's/(?<=\()(\d+), (\d+)(?=\))/\2, \1/g' file
(2, 1)
(5, 4)
(3, 2)

<强>更新

这适用于您更新的问题。

$ perl -pe 's/(?<=\()(\d+), (\d+(?:\.\d+)?)(?=\))/\2, \1/g' file
(2, 11) 
(0.2, 5) 
(2.1, 3) 
(2.1, 4)