줄의 문자열 바꾸기

줄의 문자열 바꾸기

나는 다음 줄을 가지고 있습니다 :

    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

awk3, 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   ####

관련 정보