![grep은 변수와 함께 실패하지만 변수의 철자를 입력하면 작동합니다.](https://linux55.com/image/11297/grep%EC%9D%80%20%EB%B3%80%EC%88%98%EC%99%80%20%ED%95%A8%EA%BB%98%20%EC%8B%A4%ED%8C%A8%ED%95%98%EC%A7%80%EB%A7%8C%20%EB%B3%80%EC%88%98%EC%9D%98%20%EC%B2%A0%EC%9E%90%EB%A5%BC%20%EC%9E%85%EB%A0%A5%ED%95%98%EB%A9%B4%20%EC%9E%91%EB%8F%99%ED%95%A9%EB%8B%88%EB%8B%A4..png)
쉼표로 구분된 파일이 두 개 있습니다.
파일 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
\r
accts.csv
echo $pattern
(grep 호출에서와 같이) 변수가 인용되지 않았기 때문에 공백이 표시되지 않으므로 IFS 메커니즘에 의해 깔끔하게 분할되고 잘립니다. 비슷한 것을 시도해 보세요 echo "{$pattern}"
.
당신은 자신을 정리해야합니다 :
$ pattern=$(sed 's/[ \r]//g;q' accts.csv)