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
Linux SED RegEx替换,但保留通配符_Regex_Linux_Sed_Regex Group - Fatal编程技术网

Linux SED RegEx替换,但保留通配符

Linux SED RegEx替换,但保留通配符,regex,linux,sed,regex-group,Regex,Linux,Sed,Regex Group,如果我有一个字符串,其中某处包含此内容(Foo可以是任何内容): 我失败的尝试: echo "<tag>Foo</tag>" | sed "s/<tag>\(.*\)<\\/tag>/[tag]\1[\\/tag]" echo“Foo”| sed“s/\(.\\)/[tag]\1[\\\/tag]” 您的正则表达式缺少终止的/ $ echo "<tag>Foo</tag>" | sed "s/<tag>\(.*

如果我有一个字符串,其中某处包含此内容(Foo可以是任何内容):

我失败的尝试:

echo "<tag>Foo</tag>" | sed "s/<tag>\(.*\)<\\/tag>/[tag]\1[\\/tag]"
echo“Foo”| sed“s/\(.\\)/[tag]\1[\\\/tag]”

您的正则表达式缺少终止的
/

$ echo "<tag>Foo</tag>" | sed "s/<tag>\(.*\)<\\/tag>/[tag]\1[\\/tag]/"
[tag]Foo[/tag]
$echo“Foo”| sed“s/\(.\\)/[tag]\1[\\/tag]/”
[tag]Foo[/tag]

使用此选项,您可以替换所有类型的标记,而不必是特定于标记的

$echo "<tag>Foo</tag>" | sed "s/[^<]*<\([^>]*\)>\([^<]*\)<\([^>]*\)>/[\1]\2[\3]/"
$echo“Foo”sed“s/[^\([^/[\1]\2[\3]/”

希望这能有所帮助。

首先简化您的正则表达式,使用替代字符来分隔s/s/r/,如
s@....@..…@
。一些sed需要得到警告,您正在使用备用字符(仅用于第一个字符),因此
s\@…@
。祝您好运。
$ echo "<tag>Foo</tag>" | sed "s/<tag>\(.*\)<\\/tag>/[tag]\1[\\/tag]/"
[tag]Foo[/tag]
$echo "<tag>Foo</tag>" | sed "s/[^<]*<\([^>]*\)>\([^<]*\)<\([^>]*\)>/[\1]\2[\3]/"