以下の例を使用してregex
私awk program
。
- 出力は5より長くない数だけ可能です。IG15251
- 出力には2文字のみを含めることができ、5と「O」の前後の数字は
"H" & "O"
オプションです。=< 3
=<
IGHO722または799H89090 出力は次のとおりです。いいえスペースを含む単語や数字以外の単語を含めます。IGHKKS kjsla aaa --> 許可されない
猫ファイル名
00ISM00123 189902 078HP890201 HO90902 123H7292 234HO7027 12345556 GV18029039 kslal HOsjlk jj 123 687iOu7900
私は次のスクリプトを試しました
awk '$1~/^[0-9]{,3}([hH][oO]?)[^a-zA-Z]/' filename`
しかし、ファイル名の数字を上書きしないでください。 つまり
> 189902
> 12345556
次のスクリプトを試しても、出力はまだ正しくありません!
awk '$1~/^([0-9]{,3}([hH][oO]?)?)[^a-zA-Z]/' filename
どんな説明の助けでも大変感謝します!
答え1
私はそれを2つの正規表現に分割し、これがうまくいくようです。
cat filename | grep -E '^[0-9]{5}$|^[0-9]{0,3}[hH]{1}[oO]{0,1}[0-9]{0,5}$'
正規表現の最初の部分では5桁の数字のみを含むファイル名を試し、2番目の部分では0〜3桁の数字、1つの「h」または「H」文字、0または1つの「oO」文字、0から5までのファイル名番号を試してください。
この正規表現は、次awk
のような場合にも機能します。
cat filename | awk '/^[0-9]{5}$|^[0-9]{0,3}[hH]{1}[oO]{0,1}[0-9]{0,5}$/ {print}'
答え2
awkに完全に依存していない場合、grep
これはうまく機能します:
$ grep -E '\<[[:digit:]]{1,3}HO?[[:digit:]]{1,5}\>' filename
123H7292
234HO7027
これがあなたが探している結果ですか?一致する必要があるかどうかを知りたいですHO90902
。
\<
単語境界なので、\>
「12345678H123」は一致しません。