如何使用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
答案 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)