「awk」の検索と置換にスペースとタブを含める

「awk」の検索と置換にスペースとタブを含める

以前は、他のユーザーがawkを使用して私がやっていたことを修正するのに役立ちました。ここでは、すべてのファイルのどこからでも文字列を検索し、文字列が見つかると同じ行にある2つの数字を置き換えました。

awk -i inplace '/^gene_height/{ $3=sprintf("%.0f",(169+rand()*51));$5=sprintf("%.0f",(169+rand()*51)) }1' *

これは私が作成したテストファイルでうまくいきますが(読み込むタグがはるかに少ない)、実際のファイルではCrusader Kingsモードを変更しようとしています。構成ファイルのすべての行が空白で始まり、2つのタブで始まるため、ブロックされます。 。 gene_heightの前にある「^」を削除しようとしましたが、うまくいきましたが、ファイルからスペースと2つのタブが削除され、フォーマットがめちゃくちゃになり、モードが中断される可能性があります。

上記のスクリプトが空白、2つのタブ、2つの「gene_height」文字列で始まるファイルを読み取って置き換えるときに、2つのスペースとタブを保持する方法を知っていますか?

ベストアンサー1

タブ、スペース、垂直タブを置き換えるには、[[:space:]]「t」または「v」の前にバックスラッシュを使用できます。

$ echo -e '\t' |cat -vet
^I$
$ echo -e 'x\tx x\vx' | awk '{gsub(/[[:space:]]/, "_"); print}'
x_x_x_x
$ echo -e 'x\tx x\vx' | awk '{gsub(/\t/, "_"); print}'
x_x x
     x
$ echo -e 'x\tx x\vx' | awk '{gsub(/ /, "_"); print}'
x   x_x
           x
$ echo -e 'x\tx x\vx' | awk '{gsub(/\v/, "_"); print}'
x   x x_x

おすすめ記事