我需要一个脚本来用所有文件中的较新库替换旧库

时间:2019-05-17 13:21:49

标签: linux bash

我的目录中有许多文件,由于旧的库不再起作用,所以想用一个较新的库替换所有这些文件中使用的库之一。

我已经使用ls > names.txt将所有文件名列出到txt文档中。然后,我尝试编写一个bash脚本,该脚本将遍历所有文件,捕获旧库,然后将其替换为新库。

for entry in names.txt
do
    sed 's/<libOld>/<libNew>/g' $entry > $entry
done

我希望循环遍历每个文件名,找到使用的旧库,然后将其替换为新库。但是,运行此脚本似乎无能为力。

1 个答案:

答案 0 :(得分:0)

您遇到了一些常见问题;我已经关闭了副本,但以下是针对您特定情况收集的修复程序:

使用sed就地编辑文件

使用GNU sed:

sed -i 's/<libOld>/<libNew>/g' filename

带有任何sed:

sed 's/<libOld>/<libNew>/g' filename > filename.tmp && mv filename.tmp filename

一行一行地遍历文件

for entry in names.txt仅将entry设置为names.txt,而不会读取其内容。这也是BashFAQ/001

while IFS= read -r entry; do
    printf '%s\n' "$entry"
done < names.txt

遍历目录中的所有文件

您不需要单独的文件,也不应使用ls,而应使用glob:

for fname in ./*; do
    printf '%s\n' "$fname"
done

结合您的情况

注意$entry周围的双引号。

for entry in ./*; do
    sed -i 's/<libOld>/<libNew>/g' "$entry"
done

可以简化为根本没有循环:

sed -i 's/<libOld>/<libNew>/g' ./*