所以我想替换以下
<duration>89</duration>
与 (预期结果或至少Shoud成为:)
\n<duration>89</duration>
所以基本上替换每个&lt;用\ n&lt;在正则表达式,所以我想。
sed -e 's/<[^/]/\n</g'
只有问题显然会输出
\n<uration>89</duration>
这让我想到了我的问题。我怎样才能告诉正则表达式为一个跟随&lt; (不是/)但是要阻止它取代它以便我能得到我预期的结果吗?
答案 0 :(得分:1)
试试这个:
sed -e 's/<[^/]/\\n&/g' file
或
sed -e 's/<[^/]/\n&/g' file
匹配的模式空间部分
&
:引用与
答案 1 :(得分:1)
使用awk
:
echo '<duration>89</duration>' | awk '1' RS='<' ORS='\n<'
RS='<' sets the input record separator to
&LT;`ORS='\n<' sets the output record separator to
\ n&LT;'1
始终评估为true。没有指定后续操作的真实条件告诉awk打印记录。答案 2 :(得分:0)
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>
答案 3 :(得分:0)
echo '<duration>89</duration>' | awk '{sub(/<dur/,"\\n<dur")}1'
\n<duration>89</duration>
答案 4 :(得分:0)
你的陈述是正确的,有一个小问题。 sed
取代了整个模式,即使是您放置的任何条件。因此,[^/]
条件语句也会被替换。您需要保留此部分,因此您可以尝试以下两个语句中的任何一个:
sed -e 's/<\([^/]\)/\n<\1/g' file
或者如Cyrus所指出的
sed -e 's/<[^/]/\n&/g' file
干杯!