패턴이 있어요
62G 57G 52%
나는 그것들을 별도의 행에 넣고 싶습니다.
첫 번째 일치 G Free 이후,
두 번째 Used 이후
, 세 번째 Utilized 이후
그래서 다음과 같아야합니다
62G Free
57G Used
52% Utilised
답변1
데이터가 라는 파일에 있다고 가정하면 file
다음 명령은 해당 파일의 각 줄을 읽고 지정한 형식으로 세 개의 열을 출력합니다.
$ awk '{ printf("%s Free\n%s Used\n%s Utilised\n", $1, $2, $3) }' file
62G Free
57G Used
52% Utilised
각 입력 줄에 대해 코드의 블록이 실행됩니다. 블록에는 printf()
공백으로 구분된 세 개의 열을 세 개의 행으로 형식화하고 텍스트를 추가하는 명령문이 포함되어 있습니다.
그렇게 하는 것이 불가능하지는 않지만 sed
불필요하게 어렵습니다.
$ sed -e 's/[[:blank:]][[:blank:]]*/:/g' -e 's/:/ Free@/' -e 's/:/ Used@/' -e 's/%/% Utilised/' -e 'y/@/\n/' file
62G Free
57G Used
52% Utilised
먼저 모든 공백 문자를 단일 문자로 압축한 다음 :
이러한 문자를 하나씩 바꿔서 원하는 추가 텍스트 문자열을 삽입합니다. 삽입할 때 나중에 줄 바꿈을 삽입하려는 문자 :
도 추가합니다. @
마지막 단계로 삽입된 모든 @
문자를 개행 문자로 변경합니다.
명령 의 대체 부분에 사용할 sed
수 있는 GNU를 사용하면 명령을 더 짧게 만들 수 있습니다.\n
s///
$ gsed -E -e 's/[[:blank:]]+/:/g' -e 's/:/ Free\n/' -e 's/:/ Used\n/' -e 's/%/% Utilised/' file
62G Free
57G Used
52% Utilised
두 솔루션 모두 문자열에서 및 임시 "자리 표시자 문자"로 sed
사용할 수 있으며 이러한 문자는 문자열의 다른 곳에 나타나지 않는다는 사실에 의존합니다 .:
@