我对正则表达式不太满意,我需要搜索
<
anyword />
并与<anyword></anyword>
赞<book/>
至<book></book>
答案 0 :(得分:3)
听起来你正试图用正则表达式解析XML,这通常是一个坏主意 - XML比最初看起来要复杂得多(当你需要用{{1}替换<a b="c"/>
时会发生什么那么非ASCII元素名称怎么样?) - 但如果你确定你所描述的正是你所需要的,那么你可以写:
<a b="c"></a>
或:
perl -pe 's{<(\w+)/>}{<$1></$1>}g' < input_file > output_file
答案 1 :(得分:1)
使用
sed -i 's|<\([[:alpha:]][[:alpha:]]*\)/>|<\1></\1>|g' $input_file
在线更改文件(-i
的用途)。小心:-i
是GNU扩展。
要符合POSIX并且内联编辑文件(在任何* IX系统上),请使用:
echo '/<[[:alpha:]][[:alpha:]]*\/>/g\
s/<\([[:alpha:]][[:alpha:]]*\)\/>/<\1><\/\1>/g
wq' | ed $input_file
请参阅sed,ed和regular expressions上的POSIX标准。
答案 2 :(得分:0)
与您的代码匹配的正则表达式将是:
<(\w+)/>
通过使用捕获组,您可以像这样创建新标记:
<\1></\1>
答案 3 :(得分:0)
这可能对您有用:
echo '<book/>' | sed 's|<\([^/]*\)/>|<\1></\1>|'
<book></book>