Shell-Script
如何從文件名中提取部分字元串並將其 sed 到該文件中
我正在尋求自動化一個過程,其中文件名的一部分用於替換文件本身內部的值。
目前我使用如下所示的手動過程:
手動獲取組織名
$ 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
然後用新名稱替換orgname
$ 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
*orgname=*之後的內容需要從 ABC5678 更改為 Lxxxx 之後的內容,僅在文件名中具有相同 xxxx 的文件中。
我很難弄清楚如何從文件名中提取該數字並將其用於
sed
. 有數百個文件(每個都有自己的日期)和 6 個不同的數字對可供使用。我希望編寫一個 bash 腳本來一次完成這一切。我試圖將
grep -P
其與將其放入某種變數並使用相結合,sed
但也許有更好/更簡單的方法?讓我知道是否有任何其他問題。
一旦文件名在變數中,您可以使用 shell參數擴展運算符來提取其中的一部分。然後將其替換為
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