0

我对正则表达式不是很好,我需要搜索

<任何单词/> 并替换为<anyword></anyword>

喜欢<book/>_<book></book>

4

4 回答 4

3

听起来您正在尝试使用正则表达式解析 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
于 2012-05-23T14:11:03.973 回答
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

请参阅关于seded正则表达式的 POSIX 标准。

于 2012-05-23T14:54:28.997 回答
0

匹配您的标签的正则表达式将是:

<(\w+)/>

通过使用捕获组,您可以像这样创建新标签:

<\1></\1>
于 2012-05-23T14:09:21.107 回答
0

这可能对您有用:

echo '<book/>' | sed 's|<\([^/]*\)/>|<\1></\1>|'
<book></book>
于 2012-05-23T14:43:49.870 回答