3

関数の引数として正規表現を渡す方法がわかりません。

文字列を渡せばOK、

次の awk ファイルがあります。

#!/usr/bin/awk -f

function find(name){
    for(i=0;i<NF;i++)if($(i+1)~name)print $(i+1)
}

{
    find("mysql")
}    

私は次のようなことをします

$ ./fct.awk <(echo "$str")

これは正常に動作します。

しかし、awk ファイルを呼び出すと、

{
    find(/mysql/)
}  

これは動作しません。

私は何を間違っていますか?

ありがとう、

エリック J.

4

4 に答える 4

5

正規表現定数をユーザー定義関数に渡すことはできません (すべきではありません)。この場合、動的正規表現を使用する必要があります。お気に入りfind("mysql")

もしそうならfind(/mysql/)、awkは何をしますか:find($0~/mysql/)それであなたの関数に0またはを渡します。1find(..)

詳細については、この質問を参照してください。

awk 変数代入文の説明が必要

http://www.gnu.org/software/gawk/manual/gawk.html#Using-Constant-Regexps

セクション: 6.1.2 正規表現定数の使用

于 2013-09-17T14:06:36.147 に答える
4
warning: regexp constant for parameter #1 yields boolean value

$0正規表現は、関数に渡される前に評価されます ( と照合されます)。文字列を使用する必要があります。

注: 必ず適切なエスケープを行ってください: http://www.gnu.org/software/gawk/manual/gawk.html#Computed-Regexps

于 2013-09-17T14:01:16.150 に答える