[awk] awk 내에서 작은 따옴표를 이스케이프하는 방법

나는 다음을 원한다

awk 'BEGIN {FS=" ";} {printf "'%s' ", $1}'

그러나 이런 식으로 작은 따옴표를 이스케이프하면 작동하지 않습니다.

awk 'BEGIN {FS=" ";} {printf "\'%s\' ", $1}'

어떻게하나요? 도와 줘서 고마워.



답변

이것은 아마도 당신이 찾고있는 것입니다.

awk 'BEGIN {FS=" ";} {printf "'\''%s'\'' ", $1}'

즉, '\''오프닝을 닫은 '다음 '이스케이프 하여 리터럴을 인쇄 하고 마지막으로 '다시 엽니 다 .


답변

작은 따옴표는 \x27

처럼

awk 'BEGIN {FS=" ";} {printf "\x27%s\x27 ", $1}'

출처


답변

또 다른 옵션은 작은 따옴표 를 awk 변수로 전달하는 것입니다 .

awk -v q=\' 'BEGIN {FS=" ";} {printf "%s%s%s ", q, $1, q}'

문자열 연결을 사용한 더 간단한 예 :

# Prints 'test me', *including* the single quotes.
$ awk -v q=\' '{print q $0 q }' <<<'test me'
'test me'


답변

awk 'BEGIN {FS=" "} {printf "\047%s\047 ", $1}'


답변

작은 스크립트의 경우 읽기 쉽게 만드는 선택적 방법은 다음과 같은 변수를 사용하는 것입니다.

awk -v fmt="'%s'\n" '{printf fmt, $1}'

출력에서 작은 따옴표 문자를 여러 번 생성해야하고 \ 047이 완전히 읽을 수 없게 만드는 경우에 편리함을 발견했습니다.


답변