2014-05-20 158 views
0

我有我创建的具有具有特定文件中的所有目录的列表的新文件:bash脚本替换信息文件

$ find . -name "bun.biscuts" > TREE.temp 

这会将所有正确的信息的,我需要新的临时文件。
我在使用sed编写bash脚本来替换TREE.temp文件中的电子邮件时遇到问题。

这是我到目前为止有:

#!/bin/bash 
#set -x 

echo Start! 

for bun.biscuts in (TREE.temp) 
do 
    sed -i 's/EMAIL1/EMAIL2/g'; 
done 

任何帮助将是惊人的!

+0

你可以试试这个一班轮:'找到。 -name“bun.biscuts”-exec sed -i's/EMAIL1/EMAIL2/g'{} \;'。实际上并不需要临时文件,它实际上会使任务更加困难。 –

+0

感谢您的帮助,我实际上需要临时文件作为训练片断,这将如何改变您的答案?这真的很有帮助,谢谢。 – user3653572

回答

0

gniourf_gniourf的评论是正确的;你不需要需要使用临时文件和循环来做到这一点。但是,如果你想,你可以做这样的:

while read; do 
    sed -i 's/EMAIL1/EMAIL2/g' "$REPLY" 
done < TREE.temp 

执行上的文件的每一行的文件名sed操作。 $REPLY是每行写入read的默认变量名称。您可以通过做read var来更改变量名称 - 然后每行将被写入$var

+0

谢谢你的工作,因为我需要,所有的答案都很好 – user3653572

0

只能使用一个sed命令:

sed -i.bak 's/EMAIL1/EMAIL2/g' TREE.temp 
+0

什么是.bak作品?这对我来说是新的,我也只在这个编程环境中进行了48小时的大声笑。 – user3653572

+0

'-i.bak'选项创建一个名为'TREE.temp.bak'的备份文件。你可以阅读'man sed'获取更多细节。 – cuonglm

+0

'TREE.temp'包含文件名列表,所以这将对这些名称执行替换,它不会去到每个文件并在那里执行替换(我认为是你想要的)。 –

0

如果您在计算机上的节点可以npm install -g rexreplace然后

rexreplace 'email1' 'email2' TREE.tmp