![grep을 사용할 때 리터럴 백슬래시가 있는 문자열을 검색하는 방법은 무엇입니까?](https://linux55.com/image/125675/grep%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EB%95%8C%20%EB%A6%AC%ED%84%B0%EB%9F%B4%20%EB%B0%B1%EC%8A%AC%EB%9E%98%EC%8B%9C%EA%B0%80%20%EC%9E%88%EB%8A%94%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EA%B2%80%EC%83%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
답변1
grep
이는 쉘이 보는 것과 쉘이 보는 것과 관련이 있습니다. 그래서 둘 다 조금.
grep
다양한 형태의 인용에 대해 표시되는 내용을 보려면 다음을 사용하세요.
printf '<%s>\n' G "G" 'G' \G "\G" '\G' \\G "\\G" '\\G'
이게 뭘 보여줄까껍데기다양한 유형의 참조와 관련됩니다.
grep
만 보이는 경우 G
일치하는 항목만 검색하고 설정에 따라 강조 표시합니다 G
.
grep
백슬래시 뒤에 a가 표시 되면 G
(귀하의 구현 및 아마도 모든 현재 구현에서) 백슬래시가 문자의 특별한 의미를 제거한다고 생각할 것입니다 G
. 하지만 특별한 의미는 없으므로 G
결과는 방금 통과한 것과 같습니다 G
.
두 개의 백슬래시가 있는 경우 grep
첫 번째 백슬래시는 두 번째 백슬래시의 특별한 의미를 제거합니다. 따라서 grep
see 를 사용하면 \\G
문자 그대로 백슬래시를 검색한 다음 G
.
고정 문자열을 검색하기 위해 -F
플래그를 사용하는 경우 just를 전달하여 동일한 결과를 얻을 수 있습니다. (즉, 이렇게 전달하면grep
\G
\G
grep
보다 \G
, 어떤 방식으로든 백슬래시를 이스케이프 처리해야 합니다.껍데기삭제되지 않습니다. )
답변2
당신이 언급한 예에서\G\\G
\\G
==>는 \G로만 처리됩니다. 백슬래시는 Linux에서 특별한 의미를 갖기보다는 일반 문자열로 처리합니다. 따라서 첫 번째 백슬래시로 인해 다음 문자열이 일반 문자열로 처리됩니다. 따라서 첫 번째 백슬래시는 고려되지 않습니다.
일반 문자열로 사용하려면 " \\G
로 언급해야 합니다 .echo "\G\\\G
다음 예제로 테스트했습니다.
다음을 언급하여 파일을 만들었습니다.
고양이 테스트.txt
\G
\\G
grep만 하고 싶다면 \G
다음 명령을 사용합니다.
grep '^\\G' test.txt
산출
\G
grep만 하고 싶다면 "\\G"
다음 명령을 사용합니다.
grep '\\\\G' test.txt
산출
\\G
이것을 sed 명령으로 바꿀 수 있습니다
\G가 포함된 행을 찾으려면 다음 명령을 사용하십시오.
sed -n '/^\\G/p' test.txt
\\G
다음 명령이 포함된 행을 찾으려면
sed -n '/\\\\G/p' test.txt