awk만 사용하도록 이 명령을 단순화하려면 어떻게 해야 합니까?

awk만 사용하도록 이 명령을 단순화하려면 어떻게 해야 합니까?
awk '/user/ {print $1 }' /etc/userdomains | sed 's/://'

/etc/userdomains의 형식은 다음과 같습니다.

domain.tld: user
otherdomain.tld: otheruser

답변1

가장 쉬운 방법은 필드 구분 기호를 ":"으로 설정하는 것입니다.

awk -F":" '$2~/user/{print $1}' /etc/userdomains

And if you want to check for exact username, 

awk -F"[ \t]*:[ \t]*" '$2=="user"{print $1}' /etc/userdomains

답변2

awkin ( 기본적으로) sub(regexp, replacement, target)이 처음 나타나는 것을 찾아 (in-place) 로 바꾸는 함수가 있습니다 .regexptarget$0replacement

awk '/user/ {sub(/:/, ""); print $1}' /etc/userdomains

답변3

gsubin을 사용하여 문자열의 모든 s를 awk제거 할 수 있습니다 .:

awk '/user/ {gsub(":", ""); print $1}' /etc/userdomains

답변4

대신 sed를 사용할 수 있습니다 tr.

awk '/user/ {print $1 }' /etc/userdomains | tr -d ":"

비록 이것이 단지 awk를 사용하는 것보다 아무런 이점이 없다고 생각하지만(Sed에도 문제가 없다고 생각합니다).

관련 정보