하나의 명령으로 두 작업 결합 - awk

하나의 명령으로 두 작업 결합 - awk

나 좀 바꿔야 해

- 에서

Car
Bus

- 도착하다

Helicopter
Airplane

이 두 명령으로 충분합니다.

awk -i inplace '{sub(/Car/,"Helicopter")}1' file
awk -i inplace '{sub(/Bus/,"Airplane")}1' file

이 명령으로도 충분합니다.

sed -e 's/Car/Helicopter/' \
    -e 's/Bus/Airplane/' \
    -i file

"awk"에서는 "sed"와 마찬가지로 두 가지 작업을 하나의 명령으로 결합하는 것이 가능합니다.

미리 감사드립니다!

답변1

이 시도:

awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file

이제 3개의 블록이 생겼습니다 Condition {Action}. 1블록의 특별한 경우입니다 condition {action}.

아니면 다음을 시도해 보세요.

awk -i inplace '{sub(/Car/,"Helicopter") ; sub(/Bus/,"Airplane")}1' file

, 작업 블록에는 여러 개의 문이 있을 수 있기 때문입니다.

답변2

awk -i inplace '
    /^Car$/ { print "Helicopter"; next }
    /^Bus$/ { print "Airplane";   next }
            { print }' file

^및 앵커를 사용하여 전체 줄을 일치시킴으로써 문자열이 다른 줄(예 : ) $의 하위 문자열로 일치하지 않도록 합니다 . 발견된 행에 대해 작업을 수행한 다음 즉시 실행함으로써 행이 후속 패턴을 트리거할 수 있는 것으로 변경되는 것을 방지합니다.CarCartnext

관련 정보