私は次の行を持っています:
400 january ####
304 april ####
151 may ####
126 june ####
115 august ####
98 december ####
私は彼らが次のように見えることを望みます:
#### january 400
#### april 304
#### may 151
#### june 126
#### august 115
#### december 98
このコマンドを試しましたが、成功しませんでした。
sed -E 's/(.*)(.*)(.*) /\3 \2 \1/'
答え1
より簡単な方法は次のとおりです。
awk '{print $3," "$2," "$1}' file
awk
3、2、1列のみを印刷し、3番目と2番目の列の間には2つのスペースがあり、2番目と1番目の列の間には4つのスペースがあります。
出力:
#### january 400
#### april 304
#### may 151
#### june 126
#### august 115
#### december 98
ファイルをローカルで編集するには、次のコマンドを使用します。
awk -i inplace '{print $3," "$2," "$1}' file
答え2
努力する:
$ sed -E 's/^(.*[0-9])(.*[[:alpha:]])(.*)/\3 \2 \1/' file
#### january 400
#### april 304
#### may 151
#### june 126
#### august 115
#### december 98
どのように動作しますか?
^(.*[0-9])
行の先頭から行の最後の番号まで一致します。(.*[[:alpha:]])
上端から行の最後のアルファベット文字まで一致します。(.*)
行の最後のアルファベット文字の後のすべての項目と一致します。
議論する
考慮する:
sed -E 's/(.*)(.*)(.*) /\3 \2 \1/'
sed の正規表現は、最も左と最も長い項目に一致します。これは(.*)
、上記の最初の項目が行全体と一致することを意味します。残りのグループは空です。コマンドを変更すると、これは明確になります。
$ sed -E 's/(.*)(.*)(.*) /3=\3 and 2=\2 and 1=\1/' file
3= and 2= and 1= 400 january ####
3= and 2= and 1= 304 april ####
3= and 2= and 1= 151 may ####
3= and 2= and 1= 126 june ####
3= and 2= and 1= 115 august ####
3= and 2= and 1= 98 december ####