
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はいくつかの接続句読点とUnicode文字も「単語」として認識します。
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で見つける2つのパターンを提供します。最初は「CSCO」です。したがって、一致するすべての行に一致します。 2番目のコマンドは行の先頭を見つけ、^
その後に.
0から15までの文字\{0,15\}
と行の終わりを見つけます$
。
CSCOが完全な「単語」でなければならず、より大きな単語やパターンの一部ではない場合は、実装に応じてまたはを'\<CSCO\>'
使用'\bCSCO\b'
できます(最も一般的にサポートされています)。単語境界演算子は1つと一致します。変換ポイントには、単語文字(数字または下線)と単語以外の文字(他のすべての文字)があります。'[[:<:]]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演算子の両側の2つの条件の周りに括弧を配置して、目的の答えを取得します。括弧を削除するには(低優先順位)or
(小文字)OR演算子を使用してください。
以下の2番目のURLの参照を参照してください。「or
悪用されやすいので注意してください。罠」。
https://docs.raku.org/言語/operators#Operator_precedence
https://docs.raku.org/routine/または
https://docs.raku.org/routine/|