【发布时间】:2016-10-20 20:51:37
【问题描述】:
所以我想替换以下内容
<duration>89</duration>
与 (预期的结果或者至少应该变成这样:)
\n<duration>89</duration>
所以基本上用正则表达式中的 \n
sed -e 's/<[^/]/\n</g'
它明显输出的唯一问题
\n<uration>89</duration>
这让我想到了我的问题。我如何告诉 regex 为
【问题讨论】:
所以我想替换以下内容
<duration>89</duration>
与 (预期的结果或者至少应该变成这样:)
\n<duration>89</duration>
所以基本上用正则表达式中的 \n
sed -e 's/<[^/]/\n</g'
它明显输出的唯一问题
\n<uration>89</duration>
这让我想到了我的问题。我如何告诉 regex 为
【问题讨论】:
echo "<duration>89</duration>" | sed -E 's/<([^\/])/\\n<\1/g'
应该这样做。
示例运行
$ echo "<duration>89</duration>
> <tag>Some Stuff</tag>"| sed -E 's/<([^\/])/\\n<\1/g'
\n<duration>89</duration>
\n<tag>Some Stuff</tag>
【讨论】:
试试这个:
sed -e 's/<[^/]/\\n&/g' file
或
sed -e 's/<[^/]/\n&/g' file
&: 引用模式空间中匹配的那部分
【讨论】:
-E 选项更便携恕我直言
awk 可以很好地完成:
echo '<duration>89</duration>' | awk '1' RS='<' ORS='\n<'
RS='<' sets the input record separator to
ORS='\n<' sets the output record separator to\n
1 总是评估为真。没有指定后续操作的真实条件告诉 awk 打印记录。【讨论】:
echo '<duration>89</duration>' | awk '{sub(/<dur/,"\\n<dur")}1'
\n<duration>89</duration>
【讨论】:
你的说法是正确的,有一个小问题。 sed 替换整个模式,甚至是您设置的任何条件。因此,[^/] 条件语句也被替换。您需要保留这部分,因此您可以尝试以下两种语句中的任何一种:
sed -e 's/<\([^/]\)/\n<\1/g' file
或如赛勒斯所指出的那样
sed -e 's/<[^/]/\n&/g' file
干杯!
【讨论】: