쉼표로 구분된 파일이 두 개 있습니다.
파일 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)