나는 다음 줄을 가지고 있습니다 :
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열만 인쇄하며, 세 번째와 두 번째 열 사이에는 2개의 공백이 있고 두 번째와 첫 번째 열 사이에는 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 ####