Awkプログラミング言語から
関数
sub ( r, s , t )
最初に、正規表現r
と一致する左端の最長の
部分文字列を検索します ターゲット内
文字列t
;次に、部分文字列を置換
文字列s
に置き換えます。 。関数
sub(r,s)
sub(r,s,$0)
の同義語です 。
sub ( /ana/, "anda" , "banana" )
、たとえば、banana
はbandada
に置き換えられます 。
sub ( r, s , t )
を実行した後 、新しい文字列を取得するにはどうすればよいですか?
たとえば、sub ( /ana/, "anda" , "banana" )
、新しい文字列bandada
を取得するにはどうすればよいですか ?
サブ関数は、行われた置換の数を返します。
sub
のリターンです 0または1のどちらか? sub
であるため、複数にすることはできません。 最初の一致のみを見つけて置き換えますか?
ありがとう。
承認された回答:
GNU awkマニュアルから9.1.3文字列操作関数:
…
sub()
の3番目の引数 変数、フィールド、または配列
要素である必要があります。 awkの一部のバージョンでは、3番目の引数を左辺値ではない
式にすることができます。このような場合、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