&"variable name"
예를 들어 두 개의 파일이 있고 파일의 변수는 다음과 intl_reg.sql
같습니다 .trans_by_detc.sql
intl_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 |
K Lookbehind 어설션을 사용하여 더 짧은 대안으로 일치 시작(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