Unixでファイル形式を指定する方法

Unixでファイル形式を指定する方法

ファイルがありますfile.txt。その中には、次の3つの記録があります。

<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/.*ResultDescxmlns.*>(.*):in 後の行で、get 文字列に一致する項目を探します。>\1

N;N;:現在の行に次の2行を追加します。

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

関連情報