Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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_Bash_Shell_Sed - Fatal编程技术网

Regex Sed,通配符在“之间”&引用;

Regex Sed,通配符在“之间”&引用;,regex,bash,shell,sed,Regex,Bash,Shell,Sed,我有一些文件需要更改日志记录级别并尝试使用sed <asyncLogger name="blabla" additivity="true" level="info" includeLocation="true"> </asyncLogger> <asyncLogger name="blabla1" additivity="true" level="fine"> 我试图对level=“wildcard”进行细化,并用level=“de

我有一些文件需要更改日志记录级别并尝试使用sed

    <asyncLogger name="blabla" additivity="true" level="info" includeLocation="true">
    </asyncLogger>

    <asyncLogger name="blabla1" additivity="true" level="fine">

我试图对level=“wildcard”进行细化,并用level=“debug”替换它,而这行的其余部分用
sed
修改xml几乎从来都不是一个好主意

也就是说,您的问题是
*
,因为它是贪婪的。它吸走了线路的其余部分

sed  's/\(level="\).*/"\1\debug\"/' file.xml
你可以做:

$ sed -E 's/(level=")[^"]*/\1debug/' file
<asyncLogger name="blabla" additivity="true" level="debug" includeLocation="true">
</asyncLogger>

<asyncLogger name="blabla1" additivity="true" level="debug">
$sed-E的/(level=“)[^”]*/\1debug/”文件

您需要使正则表达式不那么贪婪,因为您的。*将所有内容都吃到了最后

sed -r -e 's/(\<level *= *)["a-zA-Z"]+/\1"debug"/g'
sed-r-e的/(\类似的东西应该将
level=“blah”
替换为
level=“debug”


完美地工作:)如果没有sed,您将使用什么来修改XML?使用适当的XML解析器。Python、Perl、Ruby、PHP、Java、Javascript等
  sed -e 's/level="[^"]"/level="debug"/g' file.xml