私はホームサーバー用のプロジェクトで作業しています。設定ファイルの特定の行のテキストを変更する必要がある場所です。私が変更する必要がある行には、値が異なるユニークな属性名がありますが、ファイルに新しい行が追加され、私が変更したい行の位置が時々移動することがあります。私は、「変更」する3行目の内容を変更するためのスクリプトを書いたこのbashの変数行番号を使って特定の行を変更する
# cat kvirc4.ini
# KVIrc configuration file
[Main]
LocalKvircDirectory=C:\Users\Aulus\AppData\Roaming\KVIrc4\
SourcesDate=538186288
のように見える私のPC上のランダムな設定ファイルを選んだのスクリプトを記述し、テストするに 。このようなスクリプトを書くと、スクリプト内で行番号を直接指定すると、その1行が変更されたソースファイルの内容を示す出力ファイルが期待どおりに機能します。私は行番号を見つけて、私は行のスクリプトを指定するためのawkでの使用変数にそれを保存するためにコマンドを追加すると
# cat bashscript.sh
#!/bin/bash
awk '{ if (NR == 3) print "different"; else print $0}' kvirc4.ini.bak > output
は、しかし、もはやファイルの元のバージョンを残してその行への変更を行うものではありません。変数に正しい値が設定されていることを確認するために、以下に示すエコーを追加しました。問題は、私のawkコマンドが行番号を正しく読み込んでいないためにif文がfalseのままであるが、まだbashとawkに少し新しかったので、修正する方法がわからないということです。誰かが解決策を見つけるのに役立つアドバイスを提供できますか?
# cat bashscript.sh
#!/bin/bash
lineno=$(awk '/LocalKvircDirectory/{ print NR; exit }' kvirc4.ini.bak);lineno=$(printf '%b' $lineno)
echo $lineno
# awk 'NR==$lineno {$0="changed"} { print }' kvirc4.ini.bak
awk '{ if (NR == "$lineno") print "different"; else print $0}' kvirc4.ini.bak > output
はどのようにするためにhttps://stackoverflow.com/questions/15786777/can-we-use-shell-variables-in-awk見ますawkでシェル変数を使う... – Sundeep