1598427@931
PDD 220624P00051000 ohlc=0,0,0,0 vol=0 oi=424 nbbo=69@2316/113@532 nbbo2=69@145/113@95
PDD 220617C00051000 ohlc=0,0,0,0 vol=0 oi=434 nbbo=530@1921/710@1496 nbbo2=530@31/710@115
PDD 220722P00051000 ohlc=0,0,0,0 vol=0 oi=15 nbbo=285@1436/405@1772 nbbo2=230@15/455@15
PDD 220708C00051000 ohlc=0,0,0,0 vol=0 oi=17 nbbo=785@864/935@894 nbbo2=785@15/935@15
PDD 220624C00051000 ohlc=0,0,0,0 vol=0 oi=392 nbbo=645@771/795@947 nbbo2=645@83/795@80
PDD 220729C00051000 ohlc=0,0,0,0 vol=0 oi=0 nbbo=870@902/1190@677 nbbo2=820@15/1195@20
PDD 220708P00051000 ohlc=0,0,0,0 vol=0 oi=32 nbbo=200@1413/320@2273 nbbo2=200@15/320@356
PDD 220722C00051000 ohlc=0,0,0,0 vol=0 oi=140 nbbo=795@1630/1175@1544 nbbo2=795@51/1175@21
PDD 220729P00051000 ohlc=0,0,0,0 vol=0 oi=11 nbbo=254@3/450@3 nbbo2=254@2/570@1
CSCO 220715C00090000 ohlc=0,0,0,0 vol=0 oi=739 nbbo=0@0/4@1056 nbbo2=0@0/4@121
CSCO 220617C00090000 ohlc=0,0,0,0 vol=0 oi=203 nbbo=0@0/1@2 nbbo2=0@0/0@0
CSCO 220617P00090000 ohlc=0,0,0,0 vol=0 oi=0 nbbo=4685@654/4730@1155 nbbo2=4685@33/4730@33
CSCO 240119P00090000 ohlc=0,0,0,0 vol=0 oi=0 nbbo=4695@202/4770@193 nbbo2=4695@75/4770@33
위와 비슷한 파일이 있습니다.
CSCO
단어 또는 길이가 포함된 모든 줄을 찾고 싶습니다 <= 15
.
이 작업을 수행하려면 어떤 명령을 사용할 수 있나요?
답변1
grep -E
확장 정규식 의 경우 교대( |
)를 사용할 수 있습니다.
$ grep -E 'CSCO|^.{0,15}$' file
1598427@931
CSCO 220715C00090000 ohlc=0,0,0,0 vol=0 oi=739 nbbo=0@0/4@1056 nbbo2=0@0/4@121
CSCO 220617C00090000 ohlc=0,0,0,0 vol=0 oi=203 nbbo=0@0/1@2 nbbo2=0@0/0@0
CSCO 220617P00090000 ohlc=0,0,0,0 vol=0 oi=0 nbbo=4685@654/4730@1155 nbbo2=4685@33/4730@33
CSCO 240119P00090000 ohlc=0,0,0,0 vol=0 oi=0 nbbo=4695@202/4770@193 nbbo2=4695@75/4770@33
공백(공백, 탭 등)이 뒤따르는 줄 시작 부분의 "CSCO"만 일치시키려는 경우:
$ grep -E '^CSCO[[:space:]]|^.{0,15}$' file
또는 후행 경계 표시를 사용합니다 \>
(이것이 GNU 확장인지 "표준"인지 기억이 나지 않으며 Google에서 검색하기 어렵습니다. 확실히 GNU grep에서 작동하며 다른 언어에서도 작동할 수도 있습니다).
$ grep -E '^CSCO\>|^.{0,15}$' file
GNU grep의 정보 문서에서는 "단어" 문자를 [_[:alnum:]]
man 페이지의 정의와 달리 로 정의하고 perlre
있으며 Perl은 일부 연결 구두점 및 유니코드 문자도 "단어"로 인식합니다.
GNU grep을 사용하는 경우 해당 버전은 Perl의 \s
(모든 공백) 및 \b
(단어 경계 표시자) 도 이해합니다. -E
대신 -P
GNU grep의 -P
PCRE 지원 옵션을 사용하면 \h
가로 공백 인식이 추가됩니다. 예를 들어
$ grep -E '^CSCO\s|^.{0,15}$' file
$ grep -E '^CSCO\b|^.{0,15}$' file
$ grep -P '^CSCO\h|^.{0,15}$' file
답변2
grep -e CSCO -e '^.\{0,15\}$' filename
여기서는 grep에 찾을 두 가지 패턴을 제공합니다. 첫 번째는 "CSCO"입니다. 따라서 일치하는 모든 행과 일치합니다. 두 번째 명령은 줄의 시작 부분을 찾고 ^
그 뒤에 .
0번에서 15번까지 나타나는 문자 \{0,15\}
와 줄의 끝 부분을 찾습니다 $
.
CSCO가 완전한 "단어"여야 하고 더 큰 단어나 패턴의 일부가 아니어야 하는 경우 구현 에 따라 '\<CSCO\>'
또는 을 '\bCSCO\b'
사용할 수 있습니다 ( 는 가장 일반적으로 지원됨). 단어 경계 연산자는 하나와 일치합니다. 변환 지점에 단어 문자(숫자 또는 밑줄)와 단어가 아닌 문자 하나(다른 모든 문자)가 있습니다.'[[:<:]]CSCO[[:>:]]'
grep
\<
\>
답변3
CSCO
아마 1일에 제출한 것 같아요 . 이상한 방법:
awk '$1 == "CSCO"; length <= 15 { print }' INPUT
# length is a built-in awk function which returns the length of a line
답변4
사용행복하다(이전 Perl_6)
raku -ne '.put if (.contains("CSCO")) | (.chars <= 15);'
또는
raku -ne '.put if .contains("CSCO") or .chars <= 15;'
입력 예:
1598427@931
PDD 220624P00051000 ohlc=0,0,0,0 vol=0 oi=424 nbbo=69@2316/113@532 nbbo2=69@145/113@95
PDD 220617C00051000 ohlc=0,0,0,0 vol=0 oi=434 nbbo=530@1921/710@1496 nbbo2=530@31/710@115
PDD 220722P00051000 ohlc=0,0,0,0 vol=0 oi=15 nbbo=285@1436/405@1772 nbbo2=230@15/455@15
PDD 220708C00051000 ohlc=0,0,0,0 vol=0 oi=17 nbbo=785@864/935@894 nbbo2=785@15/935@15
PDD 220624C00051000 ohlc=0,0,0,0 vol=0 oi=392 nbbo=645@771/795@947 nbbo2=645@83/795@80
PDD 220729C00051000 ohlc=0,0,0,0 vol=0 oi=0 nbbo=870@902/1190@677 nbbo2=820@15/1195@20
PDD 220708P00051000 ohlc=0,0,0,0 vol=0 oi=32 nbbo=200@1413/320@2273 nbbo2=200@15/320@356
PDD 220722C00051000 ohlc=0,0,0,0 vol=0 oi=140 nbbo=795@1630/1175@1544 nbbo2=795@51/1175@21
PDD 220729P00051000 ohlc=0,0,0,0 vol=0 oi=11 nbbo=254@3/450@3 nbbo2=254@2/570@1
CSCO 220715C00090000 ohlc=0,0,0,0 vol=0 oi=739 nbbo=0@0/4@1056 nbbo2=0@0/4@121
CSCO 220617C00090000 ohlc=0,0,0,0 vol=0 oi=203 nbbo=0@0/1@2 nbbo2=0@0/0@0
CSCO 220617P00090000 ohlc=0,0,0,0 vol=0 oi=0 nbbo=4685@654/4730@1155 nbbo2=4685@33/4730@33
CSCO 240119P00090000 ohlc=0,0,0,0 vol=0 oi=0 nbbo=4695@202/4770@193 nbbo2=4695@75/4770@33
예제 출력:
1598427@931
CSCO 220715C00090000 ohlc=0,0,0,0 vol=0 oi=739 nbbo=0@0/4@1056 nbbo2=0@0/4@121
CSCO 220617C00090000 ohlc=0,0,0,0 vol=0 oi=203 nbbo=0@0/1@2 nbbo2=0@0/0@0
CSCO 220617P00090000 ohlc=0,0,0,0 vol=0 oi=0 nbbo=4685@654/4730@1155 nbbo2=4685@33/4730@33
CSCO 240119P00090000 ohlc=0,0,0,0 vol=0 oi=0 nbbo=4695@202/4770@193 nbbo2=4695@75/4770@33
Raku의 답변은 다른 코드 요소에 비해 OR 명령의 우선순위를 존중해야 합니다. 위의 첫 번째 예에서는 |
(우선순위가 높은) (파이프라인) OR 연산자의 양쪽에 있는 두 조건 주위에 괄호를 배치하여 원하는 답을 얻습니다. 괄호를 제거하려면 (낮은 우선순위) or
(소문자) OR 연산자를 사용하세요.
아래 두 번째 URL의 참조 내용을 참고하세요." or
악용되기 쉬우니 주의하시기 바랍니다.덫".
https://docs.raku.org/언어/operators#Operator_precedence
https://docs.raku.org/routine/또는
https://docs.raku.org/routine/|