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

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

파일에 다음 줄이 있습니다.

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

관련 정보