Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 非贪婪搜索的sed替代方案_Regex_Linux_Sed - Fatal编程技术网

Regex 非贪婪搜索的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

嗯,我知道sed不支持非贪婪搜索,但是是否有一个聪明的正则表达式来代替下面的

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")