如何在unix中格式化文件

如何在unix中格式化文件

我有一个文件file.txt。其中有以下三个记录。

<ResultDescxmlns="http://www.mpaet.com/boe/interface/common">Operation successful.
220095
9251000014

现在我想要的格式应该如下所示。

9251000014|220095|操作成功

答案1

使用“perl”和正则表达式

perl -0777 -pe 's/<ResultDescxmlns=.*?>([^\n]*).([^\n]*).([^\n]*)/\3|\2|\1/gs' file.txt

这将提取标签后面的 3 行ResultDescxmlns并将它们重新排列为所需的顺序。

答案2

sed:

sed -rn 's/<ResultDescxmlns.*>(.*)/\1/;N;N;s/\n/ /g;s/([^.]*). ([0-9]*) ([0-9]*)/\3|\2|\1/p'

s/.*ResultDescxmlns.*>(.*)/\1/:找到in.*ResultDescxmlns.*>(.*)之后的行 get string的匹配项>\1

N;N;: 将接下来的两行添加到当前行

s/\n/ /g: 用空格替换换行符

s/([^.]*). ([0-9]*) ([0-9]*)/\3|\2|\1/p:匹配正则表达式并重新排列顺序以获得所需的输出

答案3

这是另一个解决方案:

sed 's/^<[^>]*>//g' file.txt | tr '\012' '|' | awk -F'|' '{OFS=FS; print $3,$2,$1}'
9251000014|220095|Operation successful.

如果您想删除尾随,.可以使用 或 来实现(不需要两者都使用)sedawk这是一个简单的解决方案sed

sed -e 's/^<[^>]*>//g' -e 's/\.$//' file.txt

答案4

如果 file.txt 只有 3 行,这也有效:

l3=$(tail -1 file.txt)
l2=$(tail -2 file.txt | head -1)
l1=$(tail -3 file.txt | head -1 | cut -d">" -f2)
echo $l3"|"$l2"|"$l1

相关内容