Development Tip

줄의 시작과 끝을위한 Grep?

yourdevel 2020. 12. 8. 20:09
반응형

줄의 시작과 끝을위한 Grep?


-rwx 또는 drwx로 시작하고 임의의 숫자로 끝나는 줄을 grep하려는 파일이 있습니다.

나는 이것을 가지고 있지만 그것은 옳지 않다. 어떤 아이디어?

grep [^.rwx]*[0-9] usrLog.txt

까다로운 부분은 문자 클래스의 유효한 문자 중 하나로 대시를 포함하는 정규식입니다. 대시는 (일반) 문자 클래스의 경우 시작 직후와 부정 문자 클래스의 경우 캐럿 바로 뒤에 와야합니다. 닫는 대괄호도 필요하면 닫는 대괄호와 대시가 필요합니다. 자비 롭게도 대시 만 필요하므로 선택한 표기법이 필요합니다.

grep '^[-d]rwx.*[0-9]$' "$@"

참조 : POSIX 표준 세부 사항에 대한 정규식grep .


올바른 길을 ^가고있는 것 같습니다 ... 캐릭터가 줄의 시작과 $일치 하고 줄의 일치합니다. 조나단의 패턴이 효과가있을 것입니다.


캐럿 (^)은 대괄호 내에서 다르게 동작 할뿐만 아니라 대괄호 외부에 배치하는 반대의 결과를 갖게됩니다. 캐럿을 가지고있는 곳에 배치하면 괄호 안에 배치 한 내용으로 시작하지 않는 모든 문자열을 검색합니다. 또한 grep에서와 같이 괄호 사이에 별표 앞에 마침표를 넣을 수 있으며 "와일드 카드"역할도합니다.

grep ^[.rwx].*[0-9]$

이것은 당신에게 효과가있을 것입니다. 어떤 포스터들은 효과적인 방법이기도 한 그들의 표현에 캐릭터 클래스를 사용하는 것을 알아 챘지만, 당신은 당신의 원래 표현에서 어떤 것도 사용하지 않았기 때문에 가능한 한 당신의 표현에 가깝게 설명하려고 노력하고 있습니다 더 잘 이해할 수 있도록 모든 사소한 변경 사항이 있습니다. 그렇지 않으면 어떻게 배울 수 있습니까?


당신은 아마도 egrep을 원할 것입니다. 시험:

egrep '^[d-]rwx.*[0-9]$' usrLog.txt

출력을 구문 분석하고 ls -l있습니까?

그렇다면 파일 이름을 얻으려면

find . -iname "*[0-9]" 

usrLog.txt가 무언가 / 다른 사람에 의해 생성 되었기 때문에 선택의 여지가없고 반드시이 파일을 사용해야한다면 다른 옵션은 다음과 같습니다.

awk '/^[-d].*[0-9]$/' file

루비 (1.9+)

ruby -ne 'print if /^[-d].*[0-9]$/' file

세게 때리다

while read -r line ; do  case $line in [-d]*[0-9] ) echo $line;  esac; done < file

참고 URL : https://stackoverflow.com/questions/4800214/grep-for-beginning-and-end-of-line

반응형