예를 들어, a를 in "
단어 로 변경해야 합니다.quote
변화
a string with a " at some point
입력하다
a string with a quote at some point
나는 시도했다:
$ echo 'a string with a " at some point' | awk 'sub(",quote)'
awk: cmd. line:1: sub(",quote)
awk: cmd. line:1: ^ unterminated string
awk: cmd. line:1: sub(",quote)
awk: cmd. line:1: ^ syntax error
$
$ echo 'a string with a " at some point' | awk 'sub(\",quote)'
awk: cmd. line:1: sub(\",quote)
awk: cmd. line:1: ^ backslash not last character on line
awk: cmd. line:1: sub(\",quote)
awk: cmd. line:1: ^ syntax error
하지만
$ echo 'a string with a " at some point' |
awk 'sub("string","rope")'
=>
a rope with a " at some point
밧줄 단어에 적합합니다.
답변1
echo 'duck " cat' | sed 's/"/quote/'
또는 에서 정규식이므로 awk
다음 과 같은 일반적인 형식으로 표시합니다.sub
//
echo 'duck " cat' | awk 'sub(/"/,"quote")'
답변2
문자열을 사용하려면 따옴표로 묶어야 합니다. 이는 알파벳 문자로 구성된 문자열(문자열/로프 예에서처럼)과 메타문자 문자열(큰따옴표와 같이)에도 해당됩니다. 즉, sub (","quote")
작동하지 않는 이유는 sub (q,"quote")
작동하지 않는 이유와 동일합니다.
문자열 종결자 안에 큰따옴표가 있는지 확인해야 합니다. 쉘에서 문자열 종결자로 작은따옴표를 이미 프로그램에 전달하고 있어 awk
프로그램에서 이를 사용하기가 더 어려워지기 때문에 이는 약간 더 어려워집니다. 이 문제를 방지하는 방법에는 두 가지가 있습니다.
- 프로그램을
awk
문자열로 전달하는 대신 파일에 작성한 다음(라고 가정substitution.awk
) 해당 파일을 가리키는 인수를awk
사용하여 실행합니다(예 : ). 이렇게 하면 작은따옴표가 문자열 종결자로 해제되어 프로그램에서 사용할 수 있습니다.-f
awk -f substition.awk
awk
및 쉘은 모두 백슬래시(\
)를 이스케이프 문자로 지원합니다. 이를 사용하면awk
다음 문자를 일반적인 방법으로 해석할 수 없지만 일반 문자로 처리해야 함을 쉘에 알릴 수 있습니다 . 즉, 다음 중 하나를 수행할 수 있습니다.awk 'sub(\'"\',"quote")'
아니면 이거:
awk 'sub("\"","quote")'
첫 번째 예에서는 셸에서 두 개의 작은따옴표를 이스케이프하여
awk
두 번째 예에서는 큰따옴표를 이스케이프하여awk
큰따옴표가 있는 문자열을 구성합니다.
답변3
echo 'a string with a " at some point' | awk -v dq=\" '{sub(dq,"quote")}1'
답변4
8진수 이스케이프를 사용할 수 있습니다.
awk 'sub("\42", "quote")' <<'eof'
a string with a " at some point
eof