ファイル名の一部を使用して、ファイル自体内の値を変更するプロセスを自動化したいと思います。
現在使用している手動プロセスは次のとおりです。
得る協会名手動
$ grep -o orgname......... *2017-04* |uniq
...
uname=123456&**orgname=ABC5678**&userType=PERSISTENT&userLoginName=someusername&eventType=FAILED_LOGIN_ATTEMPT&timeOfOccurrence=2017-03-12%2016%3A49%3A36
その後、交換協会名新しい名前を使う
$ sed -i 's/ABC1234/5678/g' `*`5678`*` ; sed -i 's/DEF2345/6789/g' `*`6789`*`; sed -i etc...
最終結果は次のとおりです。
uname=123456&orgname=**1234**&userType=PERSISTENT&userLoginName=someusername&eventType=FAILED_LOGIN_ATTEMPT&timeOfOccurrence=2017-03-12%2016%3A49%3A36
ファイル名は次のとおりです。
rsa.collect.rsa-IB_L**1234**-2017-03-12.log.web1.decrypt
次回何が起こっても組織名=ファイル名に同じxxxxが含まれているファイルでのみ、ABC5678からLxxxxの後にあるものに変更する必要があります。
ファイル名から対応する番号を抽出することによってsed
。私はこれらすべてを一度に実行するためにbashスクリプトを書きたいと思います。
grep -P
私はそれをどのような変数に入れてそれを使用する組み合わせを試しましたが、sed
おそらくより良い/簡単な方法がありますか?
他に質問があれば教えてください。
答え1
ファイル名が変数にある場合、シェルを使用できますパラメータ拡張オペレータはその一部を抽出します。次にそれをsed
コマンドに置き換えます。以下では、部分文字列演算子を使用して位置20から始まる4つの文字を取得します。
for file in rsa.collect.rsa-IB_L*.log.web1.decrypt; do
orgname=${file:20:4}
sed -i "s/orgname=[^&]*/orgname=$orgname/" "$file"
done