![AWK를 사용하지 않고 문자열의 마지막 열 가져오기](https://linux55.com/image/127009/AWK%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98%20%EB%A7%88%EC%A7%80%EB%A7%89%20%EC%97%B4%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0.png)
sed
와 동일한 것을 제공하기 위해 or ( 플래그 grep
없이 ) 를 사용할 수 있는지 궁금합니다 .-P
awk '{print $6}'
iOS용 스크립트를 만들고 있지만 타사 명령(예: )을 설치하고 싶지 않습니다 awk
.
grep
이 플래그는 iOS에서도 지원되지 않으므로-P
지원되지 않습니다perl-regexp
.cut
iOS의 타사 명령입니다(따라서 아니요cut
).
답변1
문자열이 있는 경우바꾸다스크립트에서 (질문 제목에서 말했듯이) 마지막 필드를 추출하려는 경우 다음을 수행할 수 있습니다.
field=${string##* }
이는 문자열이 $string
공백으로 구분되어 있다고 가정합니다(위의 변수 대체에서 공백을 사용하는 구분 기호로 변경). 변수 대체는 ${variable##pattern}
주어진 것과 일치하는 가장 긴 접두사 문자열을 제거합니다.$variable
pattern
파일 의 경우 sed
다음은 각 줄의 공백으로 구분된 마지막 필드를 추출합니다.
sed 's/^.*[[:space:]]//' data.in
마지막 공백 문자를 포함하여 각 줄의 모든 항목을 제거하여 이를 수행합니다. [[:space:]]
데이터에서 탭이나 공백을 구분 기호로 사용하지 않는 경우 마지막 열 앞의 구분 기호와 일치하는 정규식으로 변경하세요.
답변2
grep
옵션을 사용할 수 있다고 가정하고 를 사용하십시오 -o
(또한 특정 열뿐만 아니라 마지막 열의 제목을 요구함으로써).
$ echo 'foo bar 123' | grep -o '[^ ]*$'
123
$ echo 'foo;bar;123' | grep -o '[^;]*$'
123
답변3
POSIX 호환 마지막 공백으로 구분된 열 sed
(동등 awk '{print $NF}'
)을 가져오고 입력이 유효한 텍스트라고 가정하려면 다음을 수행하세요.
sed 's/[[:blank:]]*$//; # remove trailing blanks
s/.*[[:blank:]]//; # remove every thing up to the last blank
' < file
대부분의 awk
구현에서는 필드를 공백(가로 간격)으로 구분하지만 일부(예: busybox ) 는 로케일 방법에 관계없이 awk
모든 공백( )으로 구분 하고 일부는 ASCII 공백(공백 및 탭)으로만 구분합니다. Microsoft 운영 체제의 파일의 경우 뒤따르는 CR 문자를 공백으로 처리하고 삭제하도록 바꿔야 [[:space:]]
할 수도 있습니다 .[[:blank:]]
[[:space:]]
여섯 번째 필드를 얻으려면( 와 동일 awk '{print $6}'
):
s='[[:blank:]]' S='[^[:blank:]]'
sed "s/^$s*\($S\{1,\}$s\{1,\}\)\{5\}\($S\{1,\}\).*/\2/; t
s/.*//; # flush the line if does not have 6 fields"
다음 방법을 사용할 수도 있습니다.
sed 's/[^[:blank:]]\{1,\}/\
&\
/6; s/.*\n\(.*\)\n.*/\1/;t
s/.*//'
답변4
마지막 열을 인쇄하기 위해 sed 명령을 사용하여 공백 구분 기호로 다음 상황을 테스트했는데 잘 작동합니다.
input.txt
praveen ajay abhi
방법 1
echo "praveen ajay abhi"| sed -r "s/.* //g"
산출
아비