grep은 변수와 함께 실패하지만 변수의 철자를 입력하면 작동합니다.

grep은 변수와 함께 실패하지만 변수의 철자를 입력하면 작동합니다.

쉼표로 구분된 파일이 두 개 있습니다.

파일 1에서 한 줄을 읽겠습니다.

사이에 쉼표를 포함하여 file2에서 일치하는 줄을 찾아야 합니다.

문자 그대로 행을 입력하여(예: 마우스로 복사하여 붙여넣기) 이 작업을 수행하면 필요한 것을 얻을 수 있습니다.

해당 줄을 변수에 할당하면 아무것도 얻지 못합니다.

혼란스러워요. 정규식 일치에 관한 한 내가 뭔가 잘못하고 있다는 것을 알고 있지만 무엇입니까?

예는 다음과 같습니다.

$ pattern=$(head -1 accts.csv)
$ echo $pattern
_ccc_net_pfx,_ccc_net_pfx_export
$ grep "$pattern" all.csv
$ grep "_ccc_net_pfx,_ccc_net_pfx_export" all.csv
MyDomain\user1,User-1,Administrator,_ccc_net_pfx,_ccc_net_pfx_export,owner,Application,,
MyDomain\user2,User-2,User,_ccc_net_pfx,_ccc_net_pfx_export,readonly,Application,,

답변1

변수 $pattern에 공백이 포함되어 있습니다. 또는 Windows 시스템에서 가져온 경우 ^M끝에 //가 있을 수 있습니다.CR\raccts.csv

echo $pattern(grep 호출에서와 같이) 변수가 인용되지 않았기 때문에 공백이 표시되지 않으므로 IFS 메커니즘에 의해 깔끔하게 분할되고 잘립니다. 비슷한 것을 시도해 보세요 echo "{$pattern}".

당신은 자신을 정리해야합니다 :

$ pattern=$(sed 's/[ \r]//g;q' accts.csv)

관련 정보