우분투에서“1”로 시작하는 grep 라인


46

"1"로 시작하는 줄을 검색하려고합니다.

ls -1 | grep ^1*

그러나 1로 시작하지 않는 행을 반환합니다. 여기서 누락 된 것은 무엇입니까?


당신이 한계에 그렙 사용하려면 : 그냥 다른 참고 ls출력 파일 이름은 줄 바꿈과 같은 몇 가지 이상한 문자 ... 많은 다른 명령을 포함하는 경우, 당신은 (어떻게 든하지 문제가 실행됩니다 ls내가 확인해야한다는, 적어도이 아닌 버전) null로 분리 된 출력을 제공하는 옵션이 있습니다. 다음으로 안전하게 처리 할 수 ​​있습니다.grep -z
Gert van den Berg

감사합니다, @GertvandenBerg! 줄 바꿈과 같은 이상한 문자로 인해 어떤 문제가 발생할 수 있습니까? 널로 분리 된 출력을 제공하는 명령은 무엇입니까?
Tim

1
-print0으로 찾으면 대부분의 다른 GNU 도구에는 -0 또는 -z 옵션이 있습니다. (정렬, xargs 등). 파일 이름에 줄 바꿈이 포함되어 있으면 두 줄이 줄 바꿈이 포함 된 파일 이름인지 또는 두 개의 별도 파일 이름인지 알 수 없습니다.
게르트 반 덴 버그

답변:


67

정규 표현은 당신이 생각하는 것을 의미하지 않습니다. (^)로 시작하는 모든 줄을 0 번 이상 반복 된 1 회 (*) 번으로 일치시킵니다. 모든 문자열은 해당 정규식과 일치합니다. grep '^1'당신이 원하는 것을합니다.


33

다음을 시도 했습니까?

 ls -1 | grep "^1"

즉, *기본적으로를 나타내는을 제거 grep하여 ^1식의 발생이 0 이상임을 찾습니다 . 즉, 1로 시작하는 행과 일치하는지 여부를 일치시킵니다.


13

이것이 귀하의 질문에 대한 답변은 아니지만 목표로 보이는 것에 대한 더 나은 해결책입니다.

ls -ld 1*

쉘 글롭을 사용하여로 시작하는 모든 파일을 나열 할 수 있습니다 1. 주 *정규 표현식보다 글 로빙 쉘에서 다른 의미를 갖습니다.


감사! +1. 쉘 globbing과 정규 표현식에서 *는 어떻게 다른 의미입니까?
Tim

2
A의 쉘 글로브 * "0 이상의 의미 와일드 카드 임의의 문자"가. 정규식의 의미는 otokan의 답변에 설명되어 있습니다.
jordanm

3

^ 1. *는 전체 줄과 일치하거나 위에서 말한 것처럼 ^ 1은 줄에 포함 된 문자열을 얻습니다.

다른 스타일의 정규 표현식은 문자를 나타내는 다른 기호를 사용하며 일부 옵션은 원하는 스타일을 지정합니다. 다른 옵션은 전체 줄을 일치 시킬지 또는 일부만 또는 전체 입력을 하나의 문자열로 일치 시킬지 여부를 지정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.