我想为所有单词添加括号 我用了
sed 's/[a-z]*/(&)/g'
inputfile.txt
hola crayola123456
abc123456
但是我选择所有空格
(hola) (crayola)1()2()3()4()5()6()
(abc)1()2()3()4()5()6()
我不应该只收到这些字吗? 我正在使用mac sed
感谢
答案 0 :(得分:3)
原因是您正在使用可以匹配空字符串的正则表达式。 .img{float:left;}
可以匹配char之前的任何空格,因为正则表达式"看到" (即检查)这些职位。您需要将[a-z]*
(匹配零或更多次出现)替换为*
量词(以匹配一个或更多字符)。
以下是如何在GNU sed中实现它的示例:
+
请参阅online demo
在Mac上,根据anubhava's comment,您需要使用echo "hola crayola123456" | sed 's/[a-z]\+/(&)/g'
选项并使用未转义的E
:
+
答案 1 :(得分:1)
两个错误:
*
表示0个或更多匹配,您需要至少一个匹配,然后+
; sed
(OSX版本)默认使用基本的regexp(因此+
不可用),您应该使用选项-E
激活扩展的regexp语法 然后:
echo "hola abc1234 foo12 bar" | sed -E 's/[a-z]+/(&)/g'
产生
(hola) (abc)1234 (foo)12 (bar)
答案 2 :(得分:1)
实际上sed在处理比赛时非常不一致。从纯正则表达式理论我可以看出,行中的任何序列[a-z]*
都应该发出(&)
,因此理论上的完美结果将是(hola)() (crayola)()1()2()3()4()5()6
,imho:First match [az] * hola,然后匹配[az] *作为下一个字符的空字符串,因为
不匹配,它将被回显......依此类推......
Plan9 sed例如发出(hola)() (crayola)()1()2()3()4()5()6
。
Linux和BSD / Mac在这里做的很奇怪。如果您将"hola1"
与"hola1a"
(hola)1()
和(hola)1(a)
进行比较,则可以看到效果。