如何在unix中将换行符引入xml文件?

Raj*_*gan 0 xml unix sed

我有一个如下文件

<slave><id>1</id><name>slave 1</name></slave><slave><id>2</id><name>slave 2</name></slave><slave><id>2</id><name>slave 3</name></slave><slave><id>4</id><name>slave 4</name></slave><slave><id>5</id><name>slave 5</name></slave>
Run Code Online (Sandbox Code Playgroud)

这需要转换为

<slave><id>1</id><name>slave 1</name></slave>
<slave><id>2</id><name>slave 2</name></slave>
<slave><id>2</id><name>slave 3</name></slave>
<slave><id>4</id><name>slave 4</name></slave>
<slave><id>5</id><name>slave 5</name></slave>
Run Code Online (Sandbox Code Playgroud)

我尝试过使用sed,但它似乎没有用.我必须使用一行命令来实现这一目标.可能trsed.但我无法使用正确的模式.

小智 5

Sobrique当然是正确的,使用regexp处理xml是一件非常糟糕的事情.所以这是一种可怕的方法:

cat infile.xml | sed -e 's#\(</slave>\)#\1\n#g'
Run Code Online (Sandbox Code Playgroud)

请注意,您需要转义括号,它会为您提供\ 1匹配,但由于单引号,您不需要转义尖括号.同时使用hash/pound/crunch /#作为分隔符意味着您也不需要转义正斜杠.

现在要非常小心 - 这适用于您当前的具体示例,但如果您的输入文件不同或者可能包含更复杂的内容,那么使用正则表达式很可能会破坏.但是,如果它是一次性的东西,或者你对输入文件的外观有充分的保证,那么它是一个快速简单的黑客,不需要特定的库,也不介意你的xml是否形成错误.