ファイル名から文字列の一部を抽出してそのファイルに挿入する方法

ファイル名から文字列の一部を抽出してそのファイルに挿入する方法

ファイル名の一部を使用して、ファイル自体内の値を変更するプロセスを自動化したいと思います。

現在使用している手動プロセスは次のとおりです。

得る協会名手動

$ 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

関連情報