Shell-Script

如何從文件名中提取部分字元串並將其 sed 到該文件中

  • May 8, 2017

我正在尋求自動化一個過程,其中文件名的一部分用於替換文件本身內部的值。

目前我使用如下所示的手動過程:

手動獲取組織名

$ 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

引用自:https://unix.stackexchange.com/questions/363761