다음 두 파일이 있습니다.
$ cat in1.lst
foo.pdf
bar.pdf
$ cat in2.lst
foo.pdf
bar\355xyz.pdf
다음 grep
명령은 첫 번째 명령에는 작동하지만 두 번째 명령에는 작동하지 않습니다.
$ grep -f in1.lst /dev/null
$ grep -f in2.lst /dev/null
grep: invalid backreference number
실제 시나리오에서는 긴 URL 목록이 포함된 파일이 있는데, 그 중 일부에는 \xxx
문자열이 포함되어 있습니다. grep
역참조의 특별한 의미를 무시하고 실행하고 싶습니다 .
매개변수를 통해 파일을 로드할 때 역참조의 특별한 의미를 무시하는 방법은 무엇입니까 -f
?
추가 정보:
$ grep --version
grep (BSD grep) 2.5.1-FreeBSD
$ type grep
grep is aliased to `grep --color=auto'
답변1
-F
--fixed-strings
패턴을 고정된 문자열 집합으로 해석하는 / 인수를 사용해야 합니다 (따라서 grep
동작을 강제합니다 fgrep
). 바라보다: man grep
.
그래서:
grep -F -f in2.lst /dev/null
또는:
fgrep -f in2.lst /dev/null