简体   繁体   中英

How should I do if the pattern in awk cmd is a bash variable and contains special character?

Description: The 1-line awk cmd is used to print all lines after the matched line in my shell script as below.

#!/bin/bash
...
awk "f;/${PATTERN}/{f=1}" ${FILE}

Since the ${PATTERN} may contains special character, the cmd will fail in this case.

Q1. How should I handle such kind of situation if regex is used in awk?

Q2. Is it possible to just use the raw string in this cmd instead of regex eg /$PATTERN/ to avoid the special character problem?

Close. It's better to pass shell variables in to awk with -v than to place them in the awk script directly.

awk -v pat="${PATTERN}" 'f; $0 ~ pat {f=1}' "${FILE}"

If ${PATTERN} is not a regex, you can use a different operator:

awk -v pat="${PATTERN}" 'f; $0 == pat {f=1}' "${FILE}"

or you can even handle non-regex substrings:

awk -v pat="${PATTERN}" 'f; index($0, pat) {f=1}' "${FILE}"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM