쉘을 사용하여 한 줄에 있는 두 개의 특수 문자 사이에 텍스트 가져오기

쉘을 사용하여 한 줄에 있는 두 개의 특수 문자 사이에 텍스트 가져오기

다음을 통해 파일에서 오는 줄이 있습니다.

cat aaa.txt | grep "HIJK"

출력은 다음을 제공합니다.

HIJK="My name is HIJK"

My name is HIJK쉘 스크립트의 변수에 텍스트를 가져와야 합니다 .

나는 이것을 시도했지만 작동하지 않습니다.

cat aaa.txt | grep "HIJK" | sed -n '/\"/,/\"/p'

답변1

또는 믹스에 추가하려면 다음을 사용하여 문제를 해결하세요 awk.

awk -F'"' '$1 ~ /HIJK/ {print $2}' aaa.txt

인쇄 :-

My name is HIJK

답변2

IFS이것을 위해 사용

$ IFS=\= read var1 var2 <<< $(grep "HIJK" aaa.txt)
$ echo $var1
HIJK
$ echo $var2
"My name is HIJK"
$ var2="${var2%\"}" // remove double quotes on both sides
$ var2="${var2#\"}"
$ echo $var2
My name is HIJK

답변3

sed기본 정규식 사용:

$ grep "HIJK" aaa.txt | sed 's/.*="\(.*\)"/\1/g'
My name is HIJK

sed확장 정규식 사용:

$ grep "HIJK" aaa.txt | sed -r 's/.*="(.*)"/\1/g'
My name is HIJK

큰따옴표는 이미 작은따옴표 안에 있으므로 이스케이프할 필요가 없습니다. 따라서 특수한 것이 아니므로 리터럴로 처리됩니다.

grep -oP귀하의 버전이 이것을 지원하는 경우 에도 사용할 수 있습니다 grep.

$ grep "HIJK" aaa.txt | grep -oP '(?<==").*(?=")'
My name is HIJK

이니셜이 grep앞에 있는 텍스트로 보장되는 경우 =이를 다음과 같이 줄일 수 있습니다.

$ grep -oP '(?<=HIJK=").*(?=")' aaa.txt
My name is HIJK

답변4

이것은 작동합니다 (만 sed, 아니오 grep):

VAR=$(sed 's/.*"\([^\"]*HIJK[^\"]*\)\"/\1/g' aaa.txt)

변수 내용:

echo $VAR
My name is HIJK

관련 정보