시작 패턴이 다른 행을 삭제하는 방법은 무엇입니까?

시작 패턴이 다른 행을 삭제하는 방법은 무엇입니까?

여러 줄이 포함된 대용량 파일이 있고 다음 조건 중 하나에 해당하는 모든 줄을 이스케이프(제거)하고 싶습니다.

  1. /*!은 또는로 시작합니다.'/*!
  2. 줄은 로 시작 #하고 그 뒤에 하나 이상의 (+) 공백, 숫자 또는 숫자가 옵니다.

다음을 사용하고 있지만 egrep -v모든 시도가 실패했습니다.

cat File.log | egrep -v '^(/*!)|^(#[ a-zA-Z0-9]+)'

답변1

당신은 이것을 시도 할 수 있습니다grep

$ grep -Ev "^'?/\*!|^#[ [:alpha:][:digit:]]+" input_file

답변2

당신이 사용할 수있는

grep -vE "^'"'?/\*!|^#[ a-zA-Z0-9]+' file

또는

grep -vE ^\''?/\*!|^#[ a-zA-Z0-9]+' file

^'패턴 주위에 작은따옴표를 삽입하고 사용하는 것이 까다로워서 첫 번째 부분에는 큰따옴표를 사용하고 이후 패턴 부분에는 작은따옴표를 사용했습니다. 두 번째 예에서는 ^문자 그대로의 의미가 유지되고 시작 전에 '이스케이프 됩니다 .\''

POSIX 문자 클래스를 사용할 수 [:alnum:]있으며 [a-zA-Z0-9]탭과 공백을 일치시키려면 다음을 사용할 수 있습니다 [:blank:].

grep -vE "^'"'?/\*!|^#[[:blank:][:alnum:]]+' file

관련 정보