![awk 인쇄 아포스트로피/작은따옴표](https://linux55.com/image/175334/awk%20%EC%9D%B8%EC%87%84%20%EC%95%84%ED%8F%AC%EC%8A%A4%ED%8A%B8%EB%A1%9C%ED%94%BC%2F%EC%9E%91%EC%9D%80%EB%94%B0%EC%98%B4%ED%91%9C.png)
awk를 사용할 때 모든 것을 탈출하는 방법을 알 수 없습니다.
각 입력 문자열을 다음과 같은 작은따옴표로 묶어야 합니다.
input
string1
string2
string3
output
'string1'
'string2'
'string3'
나는 ' " $0
도망치는 것과 관련된 모든 것에 맞서 싸우고 있었지만, 도저히 성공할 수 없었습니다. $0이 bash에 직접 전달되거나 다른 일이 발생합니다.
답변1
이를 수행하는 방법에는 여러 가지가 있습니다.
8진수 이스케이프 시퀀스를 사용하세요. ASCII 기반 시스템에서
'
인코딩은 바이트 39(8진수 047)입니다.awk '{print "\047" $0 "\047"}' input 'string1' 'string2' 'string3'
참조를 변수로 전달
$ awk -v q="'" '{print q $0 q}' input 'string1' 'string2' 'string3'
답변2
awk 코드에서는 큰따옴표 안에 아포스트로피를 넣습니다. 문자열 구성 방법(리터럴, 변수, 필드 참조, 대괄호 표현식...)에 관계없이 문자열을 서로 옆에 배치하여 연결할 수 있습니다(연결).
{ print "'" $0 "'" }
이 awk 코드가 쉘 스크립트에 포함되어 있고 awk 코드가 작은따옴표 리터럴로 되어 있는 경우 작은따옴표 문자가 awk에 전달되도록 준비해야 합니다.작은따옴표-백슬래시-작은따옴표-작은따옴표를 사용하세요.'\''
작은따옴표로 묶인 쉘 리터럴 내에 작은따옴표 문자가 포함되어 있습니다.
awk '{ print "'\''" $0 "'\''" }'
또는 작은따옴표 문자를 사용하지 않고 awk 코드를 표현하세요. awk의 문자열 리터럴에 있는 모든 문자를 나타내기 위해 백슬래시 뒤에 8진수 세 자리를 사용할 수 있습니다. ASCII 기반 시스템의 작은따옴표의 경우, 즉 \047
.
awk '{ print "\047" $0 "\047" }'
답변3
이 작업을 수행할 필요는 없습니다 awk
.
paste
대신 기본 유틸리티를 사용할 수 있습니다 .
< input paste -d "'" /dev/null - /dev/null
awk
이는 기반 또는 기반 솔루션보다 더 효율적이고 덜 제한적입니다 sed
.
답변4
백슬래시나 다른 트릭을 사용하지 않고 다음을 수행합니다.
$ printf "hello\nworld\n" | awk '{print "'"'"'" $1 "'"'"'"}'
'hello'
'world'