我想交换两行,但前提是它们的顺序错误。例如,如果我有这样的 XML 行(文件中的任何位置,某些位置不需要):
<person>
<given-name>John</given-name>
<surname>Smith</surname>
</person>
我想交换第二行和第三行,以便它产生
<person>
<surname>Smith</surname>
<given-name>John</given-name>
</person>
但仅适用于那些行乱序的文件。有没有办法用 sed 或其他 linux 工具来做到这一点?
最佳答案
这可能对你有用(GNU sed);
sed -r '$!N;s/^(\s*<given-name>.*)\n(\s*<surname>.*)/\2\n\1/;P;D' file
一次读取 2 行,如果组合错误则换行。
关于linux - 如何使用 sed 或其他 linux 工具有条件地交换两行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253695/