我正在学习unix中的sed。我需要一些帮助。我想了解原因
echo 123 abc | sed 's/\([0-9][0-9][0-9]\)/\1/' ]
当我尝试打印三个数字字母" 123"时,不起作用, 但是当我使用
时它会起作用echo 123 abc | sed 's/.* \([0-9][0-9][0-9]\).*/\1/'
如何打印" 12"而不是" 123"?
请让我知道sed是如何工作的以及我的方法是错误的。
答案 0 :(得分:0)
你可能要么想要这个:
echo 123 abc | sed 's/123/12/'
或者如果您想使用正则表达式来概括123
:
cho 123 abc | sed 's/\([0-9]\)\([0-9]\)\([0-9]\)/\1\2/g'
答案 1 :(得分:0)
在您的第一个命令中:([0-9][0-9][0-9])
与123
字段匹配,并将其放在第1组中,您可以通过\1
引用它。
那么为什么你的第一个命令没有给你123
?正则表达式是正确的,这只是因为您将123
(与[0-9][0-9][0-9]
匹配)替换为123
(由\1
引用)并且似乎发生了一些事情。
现在,您可能会理解为什么第二个命令有效。由于.
匹配任何字符,*
表示重复零次或多次,所以
([0-9][0-9][0-9]).*
匹配整个字符串,并将123
放入第1组。
所以你在第二个命令中用123
替换整个字符串,sed
默认在PatternSpace中打印内容。
如果您只想打印12
,只需将([0-9][0-9][0-9])
更改为([0-9][0-9])
。
顺便说一句,您可以使用[0-9]{3}
代替[0-9][0-9][0-9]
。