**로 시작하는 줄을 찾는 방법

**로 시작하는 줄을 찾는 방법

파일에서 .로 시작하는 줄이 있는지 찾아야 합니다 **.

*쉘에서 와일드카드로 해석되기 때문에 어떻게 해야 할지 알 수 없습니다 .

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으로 리터럴 백슬래시를 전달하려면 이스케이프해야 합니다.

이는 디렉토리에 다른 백슬래시로 시작하고 이를 포함하는 파일이 없는 한 작동합니다 ^\.

관련 정보