파일에 .로 끝나는 줄이 있는지 찾아야 합니다 **
.
*
쉘에서 와일드카드로 해석되므로 어떻게 해야 할지 모르겠습니다 .
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
man dash
[1] 읽지 않는 것을 권장합니다.
[2] 쉘이 제공되지 않았으므로 가정합니다.세게 때리다.
답변4
완전히 인용되지 않은 버전은 다음과 같습니다 grep ^\\*\\* test.out
. 쉘에서 grep으로 리터럴 백슬래시를 전달하려면 이스케이프해야 합니다.
^\
이는 디렉토리에 다른 백슬래시로 시작하고 이를 포함하는 파일이 없는 한 작동합니다.