파일에서 .로 시작하는 줄이 있는지 찾아야 합니다 **
.
*
쉘에서 와일드카드로 해석되기 때문에 어떻게 해야 할지 알 수 없습니다 .
grep -i "^2" test.out
줄이 2로 시작하면 작동하지만
grep -i "^**" test.out
분명히 작동하지 않습니다.
(또한 이 줄이 a로 끝나는지 알아야 )
하지만 아직 시도하지 않았습니다.)
답변1
문자를 사용하여 \
*를 이스케이프하여 일반 문자로 만듭니다.
grep '^\*\*' test.out
또한 쉘 확장을 방지하기 위해 큰 따옴표 '
가 아닌 작은 따옴표에 유의하십시오."
답변2
**
로 시작 하고 끝나는 줄을 확인하고 싶으면 다음과 같이 )
두 가지 연산을 결합할 수 있습니다 .grep
grep '^*\*' test.out | grep ')$'
또는 grep
이와 같은 단일 명령을 사용하면
grep -E '^\*\*.*\)$' test.out
설명
^\*\*
: 다음으로 시작하는 매치 라인**
.*
: 이후의 모든 항목과 일치**
\)$
)
: 라인의 끝에 도 있는 매치 라인입니다 .
답변3
껍데기가 아닌데
지금까지 어떤 답변도 실제 문제를 다루지 않았습니다. 설명하면 도움이 될 것 같아요왜예상대로 작동하지 않습니다.
grep -i "^**" test.out
왜냐하면 당신은인용됨패턴grep, *
이다~ 아니다쉘로 확장됩니다. 다음으로 전달됩니다.grep있는 그대로. 이에 대해서는 매뉴얼 페이지 [1] 에 설명되어 있습니다.세게 때리다[2] :
문자를 큰따옴표로 묶으면 $, `, \ 및 기록 확장이 활성화된 경우 !를 제외하고 따옴표 안의 모든 문자의 리터럴 값이 유지됩니다.
일반적인 일반 정규식입니다.
정규 표현식은무늬문자열 집합을 설명하는 것입니다.
*
정규식의 핵심 패턴 중 하나입니다. 기본적으로,grep다음과 같이 해석합니다.
* The preceding item will be matched zero or more times.
이는 현재의 패턴이 ^**
그다지 의미가 없다는 것을 의미합니다. 아마도 줄의 시작 부분과 일치하려고 할 것입니다.0회 이상, 두 배. 무엇을 의미 하던지.
해결책은인용하다그것:
특별한 의미가 있는 메타 문자는 앞에 백슬래시를 붙여 인용할 수 있습니다.
grep -i "^\*\*" test.out
[1] 읽지 않는 것이 좋습니다. 대신 또는 이와 유사한 것을 사용하십시오 man dash
.
[2] 쉘이 제공되지 않았으므로 가정합니다.세게 때리다.
답변4
이것은 완전히 인용되지 않은 버전입니다: grep ^\\*\\* test.out
. 셸에서 grep으로 리터럴 백슬래시를 전달하려면 이스케이프해야 합니다.
이는 디렉토리에 다른 백슬래시로 시작하고 이를 포함하는 파일이 없는 한 작동합니다 ^\
.