
다음을 통해 파일에서 오는 줄이 있습니다.
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