替换文件中信息的Bash脚本

替换文件中信息的Bash脚本,bash,sed,Bash,Sed,我创建了一个新文件,其中包含一个包含特定文件的所有目录的列表: $ find . -name "bun.biscuts" > TREE.temp 这会将我需要的所有正确信息写入新的临时文件。 我在使用sed替换TREE.temp文件中的电子邮件时编写bash脚本时遇到问题 这就是我到目前为止所做的: #!/bin/bash #set -x echo Start! for bun.biscuts in (TREE.temp) do sed -i 's/EMAIL1/EMAIL2

我创建了一个新文件,其中包含一个包含特定文件的所有目录的列表:

$ find . -name "bun.biscuts" > TREE.temp
这会将我需要的所有正确信息写入新的临时文件。 我在使用sed替换TREE.temp文件中的电子邮件时编写bash脚本时遇到问题

这就是我到目前为止所做的:

#!/bin/bash
#set -x

echo Start!

for bun.biscuts in (TREE.temp)
do
    sed -i 's/EMAIL1/EMAIL2/g';
done
任何帮助都将是惊人的

您只能使用一个sed命令:


格尼奥尔夫的评论是正确的;您不需要使用临时文件和循环来执行此操作。但如果你想,你可以这样做:

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

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

如果您的计算机上有节点,您可以npm安装-g REXPLACE,然后


你可以试试这句话:找到-名称bun.biscuts-exec sed-i's/EMAIL1/EMAIL2/g'{}\;。不需要临时文件,这会让任务变得更加困难。谢谢你的帮助,我需要临时文件作为培训材料,这会如何改变你的答案?这真的很有帮助,谢谢。什么是.bak块?这对我来说是新的,而且我在这个编程环境中只呆了48小时。lol.-I.bak选项创建一个名为TREE.temp.bak的备份文件。你可以阅读man sed以了解更多详细信息。TREE.temp包含文件名列表,因此这将对这些名称执行替换,它不会转到每个文件并在那里执行替换,我认为这是你想要的。谢谢,这在我需要时起到了作用,所有答案都很好
while read; do
    sed -i 's/EMAIL1/EMAIL2/g' "$REPLY"
done < TREE.temp
rexreplace 'email1' 'email2' TREE.tmp