파일이 있습니다 test.xml
(아래 참조). 이 grep의 작동 방식은 다음과 같습니다.
grep '<appointment-id internal:ref=1.2.3/>' test.xml
출력은 다음과 같습니다
<appointment-id internal:ref=1.2.3/>
그러나 이것은 실패합니다.
grep "$(grep '<appointment-id internal:ref=1.2.3/>' test.xml)" test.xml
출력은 다음과 같습니다
grep: invalid character range
콘텐츠 test.xml
:
<note>
<to>Jim</to>
<from>John</from>
<heading>Reminder</heading>
<body>Some text</body>
<appointment-id internal:ref=1.2.3/>
</note>
grep
이 두 명령(간단한 명령과 중첩 명령)을 를 사용하여 스크립트에 넣었습니다 set -x
. 다음은 스크립트를 정확하게 복사하여 붙여넣은 것입니다.
set -x
grep '<appointment-id internal:ref=1.2.3/>' test.xml
grep "$(grep '<appointment-id internal:ref=1.2.3/>' test.xml)" test.xml
exit 0
출력은 다음과 같습니다.
++ grep '<appointment-id internal:ref=1.2.3/>' test.xml
<appointment-id internal:ref=1.2.3/>
+++ grep '<appointment-id internal:ref=1.2.3/>' test.xml
++ grep ' <appointment-id internal:ref=1.2.3/>' test.xml
grep: invalid character range
++ exit 0
답변1
grep
출력이 터미널이 아니더라도 (내부적으로) 컬러 출력을 생성합니다. 환경 변수가 로 설정 되면 GREP_COLOR
이 작업이 수행될 수 있습니다 always
.
음영 제어 코드에는 외부에서 입력할 때 grep
문자 범위로 해석되는 문자가 포함되어 있습니다.
이 패턴은 문자 범위로 해석될 때 아무런 효과가 없습니다.
grep
--color=never
해결 방법은 적절한 환경 변수( )를 명시적으로 사용하거나 설정하여 출력 색상 지정을 비활성화하는 것입니다 GREP_COLOR=never
.
이것을 설정하면 예제에서 external 의 경우처럼 터미널에 쓸 때 컬러 출력만 생성해야 하지만 inner 의 경우에는 GREP_COLOR=auto
그렇지 grep
않습니다 .grep
grep