티스토리 뷰

반응형

쉘스크립트를 만들때 awk로 문자열을 가공할때 작은 따옴표 (' ') 를 넣어야 할때가 있습니다.

작은 따옴표는 홑따옴표 , single quote 라고도 하죠. 의외로 쌍따옴표 (" ") 넣는 것보다 간단하지 않았습니다.

가공하는 방법 몇가지를 정리해보려고 합니다.

 

아래는 문자열과 변형하여 출력할 결과물입니다.

--원본
123 abc
321 ddff
433 dfg

-- 원하는 결과
value is 'abc'
value is 'ddff'
value is 'dfg'

쌍따옴표 (" ")는 아래와 같이 역슬래시( \ )를 사용하면 쉽게 표시할 수 있습니다.

하지만 홑따옴표는 동일한 방법으로는 안되네요.

$ "123 abc" | awk '{ print "value is \"abc\" " }'
value is "abc"
$ echo "123 abc" | awk '{ print "value is \'abc\' " }'
>

그래서 제가 지금까지 조사한 바로는 아래와 같이 5가지 방법이 있고, 다른 방법도 가능할 수 있습니다.

-- escape 문자처리 (octal)
echo "123 abc" | awk '{ print "value is \047abc\047 " }'  
-- escape 문자처리 (hexadecimal, linux에서만 작동)
echo "123 abc" | awk '{ print "value is ""\x27""abc""\x27"  }'
-- escape 문자처리
echo "123 abc" | awk '{ print "value is '\''abc'\'' " }'

-- 변수처리
echo "123 abc" | awk -v q="'" '{print "value is" q $2 q}'

echo "123 abc" | awk '{ print "value is '"'abc'"' " }'

hexadecimal 형식은 aix에서는 예상대로 작동하지 않네요. 플랫폼이나 awk 버전에 따라 결과가 다를 수 있을 듯 합니다.

마지막에 사용한 방법은 예전에 찾아놓은 것인데 원리를 잘 모르겠군요.

확인되면 업데이트 하도록 하겠습니다. 😅

 

참고자료

https://stackoverflow.com/questions/9899001/how-to-escape-a-single-quote-inside-awk

https://unix.stackexchange.com/questions/222709/how-to-print-quote-character-in-awk

https://www.unix.com/unix-for-dummies-questions-and-answers/26035-how-print-single-quote-awk.html

반응형
댓글