정규식과 대체 문자열이 주어지면 awk를 사용하여 다음을 달성하려면 어떻게 해야 합니까?
- 행에 일치하는 항목이 없으면 아무 작업도 수행되지 않습니다.
- 한 줄에 일치하는 항목이 여러 개 포함된 경우 마지막 일치 항목을 대체 문자열
gsub()
로 바꾸세요. 즉, 마지막 일치 항목은 ; - 행에 일치 항목이 하나만 포함된 경우 해당 일치 항목을 대체 문자열로 바꿉니다.
예를 들어Gawk에서 "예기치 않은 문자 '\'"가 발생했습니다.
감사해요.
답변1
사용하지 말고 gsub()
사용하세요무늬FS 및 OFS에 대한 필드 구분 기호로 OFS를 그대로 유지한 채 마지막 두 필드를 제외한 모든 필드를 인쇄하고 다음으로 마지막에서 두 번째 필드를 인쇄합니다."문자열 바꾸기"그런 다음 마지막 필드가 나옵니다.
awk 'BEGIN{ FS=OFS="pat" }
NF>1{ for(i=1; i<NF-1; i++) printf "%s", $i OFS;
printf "%s\n", $i "REPLACEMENT-STRING" $NF; next
}1' infile
입력 예:
pat 1 pat2 patt 3 pat 4
pat
patt pat
pa t
산출:
pat 1 pat2 patt 3 REPLACEMENT-STRING 4
REPLACEMENT-STRING
patt REPLACEMENT-STRING
pa t