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

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

파일에 .로 끝나는 줄이 있는지 찾아야 합니다 **.

*쉘에서 와일드카드로 해석되므로 어떻게 해야 할지 모르겠습니다 .

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

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

관련 정보