如何从文件名中提取字符串的一部分并将其插入到该文件中

如何从文件名中提取字符串的一部分并将其插入到该文件中

我正在寻求自动化一个过程,其中文件名的一部分用于替换文件本身内的值。

目前我使用的手动流程如下所示:

得到组织名称手动

$ 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

不管以后是什么组织名称=需要从 ABC5678 更改为 Lxxxx 后面的任何内容,仅在文件名中具有相同 xxxx 的文件中。

我很难理解如何从文件名中提取该数字并在sed.有数百个文件(每个文件都有自己的日期)和 6 个不同的数字对可供使用。我希望编写一个 bash 脚本来一次性完成这一切。

我试图grep -P结合使用,将其放入某种变量中并使用,sed但也许有更好/更简单的方法?

如果还有任何其他问题,请告诉我。

答案1

一旦文件名位于变量中,您就可以使用 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

相关内容