여러 SQL 파일에서 Grep appsand(&) 및 그 뒤에 오는 단어(변수 이름)

여러 SQL 파일에서 Grep appsand(&) 및 그 뒤에 오는 단어(변수 이름)

&"variable name"예를 들어 두 개의 파일이 있고 파일의 변수는 다음과 intl_reg.sql같습니다 .trans_by_detc.sqlintl_reg.sql

&campus     
&level  
&ptc    
&visa   
&term   
&sort

파일에서 trans_by_detc.sql,

&detc       
&date1   
&date2   
&credits   

목록을 작성하고 아래와 같은 파일에 쓰고 싶습니다.

intl_reg.sql campus level ptc visa term sort
trans_by_detc.sql detc date1 date2 credits

가능합니까 grep?

답변1

그리고암소 비슷한 일종의 영양 grep:

$ grep -oP '^&\K\w+' file | paste -sd ' ' -

정규식 일치는 다음과 같습니다.

마디 설명하다
^ 문자열의 시작
& &
\K KLookbehind 어설션을 사용하여 더 짧은 대안으로 일치 시작(ept)을 재설정합니다 .주위를 둘러보세요그리고정규식에서 K 지원
\w+ 단어 문자(az, AZ, 0-9, _)(1회 이상(최대한 많이 일치))

아니면 평소처럼 grep:

$ grep -o '[[:alnum:]_]\{1,\}' file | paste -sd ' ' -

정규식 일치는 다음과 같습니다.

마디 설명하다
[[:alnum:]_] 모든 문자: 문자 및 숫자, "_"
\{1,\} 적어도 한 번은

적용 대상:

  • 솔라리스 11
  • FreeBSD 13.1-
  • 바쁜 상자
  • 니코스
  • 고산 ash껍질
  • ...

산출

campus level ptc visa term sort

완전한 OP 요구 사항 포함

$ for s in intl_reg.sql trans_by_detc.sql; do
      printf '%s\n' "$s $(grep -o '[[:alnum:]_]\{1,\}' "$s" | paste -sd ' ' -)"
  done
intl_reg.sql campus level ptc visa term sort
trans_by_detc.sql detc date1 date2 credits

답변2

perl -nE '$v{$1}++ while /&(\w+)/g; END{say join " ", sort keys%v}' your-file

&ASCII 단어의 임의 위치 뒤에 오는 고유한 문자 시퀀스의 정렬된 목록을 인쇄합니다 your-file.

sql현재 작업 디렉터리의 모든 파일을 처리합니다 .

perl -nE '$a{$1}++ while /&(\w+)/g;
          if (eof) {
            say join " ", $ARGV, sort keys%a; undef %a
          }' ./*.sql

관련 정보