티스토리 뷰
반응형
쉘스크립트를 만들때 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
반응형
댓글
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday