以前は、他のユーザーが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