Bash SED,使用变量并与数组一起使用

Bash SED,使用变量并与数组一起使用,bash,sed,Bash,Sed,我尝试使用以下变量在directory Server_Upload中的多个文件上运行sed: AB${count} 对应于我制作的一些变量,如下所示: echo " AB1 = 2010-10-09Three " echo " AB2 = 2009-3-09Foo " echo " AB3 = Bar " 这些对应于master.ta中包含一个单词的每一行,需要在服务器上传的所有文本文件中进行更改 如果你明白我的意思。。。太好了,我已经尽力解释了,但是如果你仍然生气的话,我

我尝试使用以下变量在directory Server_Upload中的多个文件上运行sed:

AB${count}
对应于我制作的一些变量,如下所示:

  echo " AB1 = 2010-10-09Three " 
  echo " AB2 = 2009-3-09Foo " 
  echo " AB3 = Bar " 
这些对应于master.ta中包含一个单词的每一行,需要在服务器上传的所有文本文件中进行更改

如果你明白我的意思。。。太好了,我已经尽力解释了,但是如果你仍然生气的话,我会再试一次,因为我发现很难表达我的意思

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
cd服务器\u上传
对于fl in*.UP;做
mv$fl$fl.old
完成
计数=1
saveIFS=“$IFS”
IFS=$'\n'
数组=($($fl
((count++)
完成

它运行,没有给我任何错误,但它没有做我想要的,所以有什么想法吗?

您的循环应该如下所示:

while read i
  do
  sed "s/$i/AB${count}/g" $fl.old > $fl
  (( count ++ ))
done < master.ta
当我读的时候
做
sed“s/$i/AB${count}/g”$fl.old>$fl
((count++)
完成

我看不出有什么理由使用数组或类似的东西。这对您有用吗?

看起来您的
sed
命令依赖于第一个
for
循环内部的
$fl
,即使
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
count=1
当我读书的时候
做
sed-i'.old'-e“s/$i/AB${count}/g”服务器上传/*.UP
((count++)
完成

(这是整个脚本,其中也包含了Patrick的答案。)这应该用文本
ABn
替换
master.ta
n行
在任何*.UP文件中出现的每一个文本。

我不太清楚你想做什么,但我相信你想要的是: (未经测试)

做 eval repl=\$AB${count} ...
如果有一个变量$AB3和一个变量$count,$AB${count}是$AB和$count的串联(因此,如果$AB为空,则与$count相同)。您需要使用eval来获取$AB3的值。

如果您将第一个
done
语句从它所在的位置移动到第二个
done
之后,是否会有所帮助?

下次,显示您获得的文件示例。以及您希望的输出是什么样子。如果不解释使用示例需要什么,很难说出您是一个什么样的人实际上,即使你发布了你的代码,你的代码可能是错误的。 do eval repl=\$AB${count} ...