Regex 非贪婪搜索的sed替代方案
嗯,我知道sed不支持非贪婪搜索,但是是否有一个聪明的正则表达式来代替下面的Regex 非贪婪搜索的sed替代方案,regex,linux,sed,Regex,Linux,Sed,嗯,我知道sed不支持非贪婪搜索,但是是否有一个聪明的正则表达式来代替下面的 VARIABLE=" text1 text2 text3 " 与 现在我只能替换第一个匹配项。我认为在这种情况下,sed不支持非贪婪正则表达式并不重要,下面这样的非包含范围替换应该足够了。我使用GNU sed运行了一个测试,请参见下面的结果 sed '/^VAR.*="/,/^"/ {/"/! s/^/A/}' testfile.txt VARIABLE=" Atext1 Atext2 Atext3 " test d
VARIABLE="
text1
text2
text3
"
与
现在我只能替换第一个匹配项。我认为在这种情况下,sed不支持非贪婪正则表达式并不重要,下面这样的非包含范围替换应该足够了。我使用GNU sed运行了一个测试,请参见下面的结果
sed '/^VAR.*="/,/^"/ {/"/! s/^/A/}' testfile.txt
VARIABLE="
Atext1
Atext2
Atext3
"
test
data
test
p
VARIABLE="
Atext1
Atext2
Atext3
"
test
data
编辑:或者正如所指出的,这可以简化为更惯用的形式
sed '/^VAR.*="/,/^"/ {//! s/^/A/}' testfile.txt
假设文本不包含双引号:
sed '/"/!s/^/A/' input
我假设您要替换变量的内容:
VARIABLE=$(sed 's/./A&/' <<< "$VARIABLE")
VARIABLE=$(sed's//A&/'sed's/text/Atext/g'
不起作用?@ExplosionPills抱歉,这只是我给出的一个坏例子。变量可以是任何东西。回答得很好。但是我忘了提到输入文本可以包含附加文本以及指定的文本。这可能会稍微缩短为sed'/^VAR.=“/,/^”/{//!s/^/A/}“
@poton,谢谢你,那确实更地道,我已经编辑了我的answer@potong你能解释一下这里的/
是如何匹配的吗?@Sparhawk/
表示使用最后一个提供的regexp。在这种情况下,触发器命令中使用的地址之一。因此A
仅插入第一个和第二个A之间地址。
VARIABLE=$(sed 's/./A&/' <<< "$VARIABLE")