awkプログラミング言語で
この関数は、最初に
sub ( r, s , t )
正規表現に一致するターゲット文字列の一番左にある部分文字列を見つけ、その部分文字列を代替文字列に置き換えます。r
t
s
この機能
sub(r,s)
はの同義語ですsub(r,s,$0)
。
sub ( /ana/, "anda" , "banana" )
たとえば、inはbanana
に置き換えられますbandada
。
実行後にsub ( r, s , t )
新しい文字列を取得する方法は?たとえば、からsub ( /ana/, "anda" , "banana" )
新しい文字列を取得するにはどうすればよいですかbandada
?
sub関数は置き換えられた回数を返します。
sub
0または1が返されますか?sub
最初の一致のみを見つけて置き換えるため、複数にすることはできません。これは正しいですか?
ありがとうございます。
答え1
GNU awkマニュアルから9.1.3 文字列演算関数:
...3番目の引数は
sub()
変数、フィールド、または配列要素でなければなりません。一部のawkバージョンでは、3番目の引数はlvalueではなく式を受け入れます。この場合もsub()
パターンを検索して 0 または 1 を返しますが、代替結果 (存在する場合) を入れる位置がないため削除されます。このバージョンのawkでは、次のような表現が可能です。
sub(/USA/, "United States", "the USA and Canada")
記録の互換性のために、gawkはこれらのエラーコードを受け入れます。しかし、他の不変オブジェクトを3番目の引数として使用すると、致命的なエラーが発生し、プログラムは実行されません。
したがって、答えは変数を使用することです。
awk 'BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}'
bandana