我对正则表达式不是很好,我需要搜索
<
任何单词/>
并替换为<anyword></anyword>
喜欢<book/>
_<book></book>
听起来您正在尝试使用正则表达式解析 XML,这通常是个坏主意 — XML 比最初看起来要复杂得多(当您需要替换时会发生什么<a b="c"/>
?<a b="c"></a>
非 ASCII 元素名称呢?)—但如果你确定你所描述的正是你所需要的,那么你可以写:
perl -pe 's{<(\w+)/>}{<$1></$1>}g' < input_file > output_file
或者:
sed 's|<\([^[:space:]][^[:space:]]*\)/>|<\1></\1>|g' < input_file > output_file
利用
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
匹配您的标签的正则表达式将是:
<(\w+)/>
通过使用捕获组,您可以像这样创建新标签:
<\1></\1>
这可能对您有用:
echo '<book/>' | sed 's|<\([^/]*\)/>|<\1></\1>|'
<book></book>