我的目录中有许多文件,由于旧的库不再起作用,所以想用一个较新的库替换所有这些文件中使用的库之一。
我已经使用ls > names.txt
将所有文件名列出到txt文档中。然后,我尝试编写一个bash脚本,该脚本将遍历所有文件,捕获旧库,然后将其替换为新库。
for entry in names.txt
do
sed 's/<libOld>/<libNew>/g' $entry > $entry
done
我希望循环遍历每个文件名,找到使用的旧库,然后将其替换为新库。但是,运行此脚本似乎无能为力。
答案 0 :(得分:0)
您遇到了一些常见问题;我已经关闭了副本,但以下是针对您特定情况收集的修复程序:
使用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' ./*