변수를 grep하는 방법

변수를 grep하는 방법

이런 시나리오가 있어요

VAR = `Some command brings the file path name and assigns it to VAR`

예를 들어 VAR은 /root/user/samp.txt와 같은 값을 가질 수 있습니다.

나는 grep 명령을 원한다

grep HI $VAR 

이것은 작동하지 않습니다. /root/user/samp.txt를 열 수 없다는 오류가 발생합니다. cat $VAR을 시도할 때 동일한 오류가 발생합니다.

이 문제를 어떻게 처리합니까?

나는 시도했다

echo $VAR | grep HI
grep HI "$VAR"

콘 쉘 사용

답변1

grep을 요청하신 것을 알고 있지만 제가 올바르게 이해했다면 경로 문자열에서 하위 문자열을 검색하고 싶을 것입니다. just ==또는 =~like를 사용하여 이를 달성할 수 있습니다.

[[ "$VAR" == *"HI"* ]]     # Does "$VAR" match <stuff>HI<stuff>?

또는

[[ "$VAR" =~ "HI" ]]       # Does "$VAR" contain HI?

답변2

명령으로 파일 경로가 할당된 변수가 있습니다.

예를 들어

VAR= grep /adr filename - 내 파일 이름에 다음과 같은 줄이 있다고 가정합니다./adr/samp.txt

따라서 $VAR을 echo하면 /adr/samp.txt가 표시되지만 cat $VAR 또는 grep에서는 오류가 발생합니다.

VAR=$(grep /adr filename)을 설정하여 이 문제를 해결했습니다. 그런 다음 cat $VAR을 수행할 수 있습니다.

뭐가 문제인지 모르겠어요

고마워요, 아델

답변3

WAF의 [[ "$VAR" =~ "HI" ]]답변다음은 귀하가 찾고 있는 훌륭한 솔루션입니다 bash. 그러나 이식 가능한 솔루션을 찾는 사람이 있는 경우 ksh일반 POSIX 셸(basic ) /bin/sh에서 로컬로 수행하는 방법은 다음과 같습니다.

[ "$VAR" != "${VAR#*HI}" ]

조심하세요,쉘 모드 구문(일명 "와일드카드")는다른POSIX 정규식 구문에서 파생되었습니다.

이는 인수 확장의 값을 비교하여 다음을 달성 $VAR합니다 .${VAR#*HI}하위 문자열 삭제"HI"의 시작과 첫 번째 인스턴스 사이의 모든 항목을 제거합니다(주어진 경우 VAR="OHIO"선행 ${VAR#*HI}은 제거되고 . OHI의 결과 는 변경되지 않습니다).OVAR="Hi, I am bob"

!=비교 로 인해 반환 값은 다음과 같습니다.진짜( 0) 두 문자열이 다른 경우(표현에 "HI"가 존재함 $VAR) 및잘못된( 1)가 동일한 경우("HI"는 표현에 존재하지 않음 $VAR).

관련 정보