我要做的是使用变量在目录Server_Upload中的多个文件上运行sed:
AB${count}
对应于我所做的一些变量:
echo " AB1 = 2010-10-09Three "
echo " AB2 = 2009-3-09Foo "
echo " AB3 = Bar "
这些对应于 master.ta 中包含单词的每一行,需要更改Server_Upload中的所有文本文件。
如果你理解我的意思......太棒了,我试图尽我所能地解释它,但如果你仍然生气,我会再给它一次,因为我发现它很难表达我的意思。
cd Server_Upload
for fl in *.UP; do
mv $fl $fl.old
done
count=1
saveIFS="$IFS"
IFS=$'\n'
array=($(<master.ta))
IFS="$saveIFS"
for i in "${array[@]}"
do
sed "s/$i/AB${count}/g" $fl.old > $fl
(( count++ ))
done
它运行,不会给我任何错误,但它没有做我想要的,所以任何想法?
答案 0 :(得分:2)
你的循环应如下所示:
while read i
do
sed "s/$i/AB${count}/g" $fl.old > $fl
(( count ++ ))
done < master.ta
我没有理由使用数组或类似的东西。这对你有用吗?
答案 1 :(得分:0)
即使sed
行位于$fl
循环之外,看起来for
命令依赖sed
来自第一个for
循环内部。如果您使用sed
进行就地编辑的系统(-i
选项),则可以执行以下操作:
count=1
while read i
do
sed -i'.old' -e "s/$i/AB${count}/g" Server_Upload/*.UP
(( count ++ ))
done < master.ta
(这是整个脚本,其中也包含了Patrick的答案。)这应该替换ABn
n
master.ta
行{{1}}文本的每一个文本{{1}}。在任何* .UP文件中。
答案 2 :(得分:0)
我不清楚你要做什么,但我相信你想要的东西: (另)
do eval repl=\$AB${count} ...
如果你有一个变量$ AB3和一个变量$ count,$ AB $ {count}是$ AB和$ count的串联(所以如果$ AB为空,它与$ count相同)。您需要使用eval来获取$ AB3的值。
答案 3 :(得分:0)
如果您将第一个done
语句从第二个done
之后的位置移到第一个{{1}},这会有帮助吗?