我的目录中有许多文件,并且希望用较新的库替换所有这些文件中使用的库之一,因为旧库不再工作。
我用过ls > names.txt
将所有文件名列出到 txt 文档中。然后,我尝试编写一个 bash 脚本,该脚本将循环遍历所有文件,捕获旧库,并将其替换为新库。
for entry in names.txt
do
sed 's/<libOld>/<libNew>/g' $entry > $entry
done
我希望循环遍历每个文件名,找到使用的旧库,并将其替换为新库。然而,运行此脚本似乎没有执行任何操作。
最佳答案
您遇到了一些常见问题;我已作为重复项关闭,但以下是针对您的具体情况收集的修复程序:
使用 sed 就地编辑文件
使用 GNU sed:
sed -i 's/<libOld>/<libNew>/g' filename
使用任何 sed:
sed 's/<libOld>/<libNew>/g' filename > filename.tmp && mv filename.tmp filename
逐行循环文件
对于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' ./*
关于linux - 我需要一个脚本来用所有文件中的新库替换旧库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56187322/