
3つの文字と3〜4つの数字からなる列をファイルから検索したいと思います。例えば。
if ( $1 ~ /^[A-Z][A-Z][A-Z][0-9][0-9][0-9]/)
しかし、この3文字が変数として必要なので結果を探しています。
SP="ABC"
if ( $1 ~ /^/SP/[0-9][0-9][0-9]/)>
しかし、これはうまくいきません。検索パターンで変数と正規表現を組み合わせる方法は?
答え1
SP="ABC"
if ( $1 ~ "^" SP "[0-9]{3}")
接続してくださいひもただし、代わりに/xxx/
sは実際に正規表現一致演算子に近いので、解析規則が混乱する可能性があります(実装によって異なる場合があります)。
$1 ~ /ABC/ /BCD/
これは、(一致するかどうかに応じて1または0)と(一致するかどうかによって1または0)の接続で一致を連結するか、一致する$1
ペア(0または0)を連結するように見えます。 1) 混同される可能性のある match を使用する場合。ただし、この演算子は除算演算子と混同される可能性があるため、他の演算子(ここでは連結演算子など)と一緒に使用するとうまく機能しません。/ABC/
$0
/ABC/
/BCD/
$0
/BCD/
$1
/ABC/
$0
/BCD/
/regexp/
/
しかし、括弧を使用すると興味深くなります(読むSUV)行動:
$ echo 11 ab | gawk '{print $1 ~ /a/ (/b/)}'
1
$ echo 11 ab | bwk-awk '{print $1 ~ /a/ (/b/)}'
01
$ echo b | bwk-awk '{print /a/ - (/b/)}'
0-1
(後者は/a/
(0)をの結果と結び付けた結果です- (/b/)
。)
では、$1 =~ "^" SP "[0-9]{3}"
SPの内容はまだ正規表現として扱われます(そうであれば、...
3つの点ではなく3つの文字と一致)。
if (index($1, SP) == 1 && substr($1, length(SP)+1) ~ /^[0-9]{3}/)
答え2
awkに正しい文字で始まり、角かっこ内に "type"文字を使用してから、中括弧内に繰り返される数字を使用する正規表現を読み取るように指示できます。このように:
echo "ABC956" | awk '{ if( $1 ~ /^ABC[0-9]{3}/) print "HELLOWORLD" }'
HELLOWORLD
&&
論理演算子を使用して、変数と正規表現の存在をテストすることもできます。
echo "ABC956" | awk -v VAR="ABC" '{ if( $1 ~ VAR && $1 ~ /[0-9]{3}/) print "HELLOWORLD" }'
HELLOWORLD