파일에 다음 줄이 있습니다.
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