从文件中逐行执行shell命令

时间:2016-07-21 10:05:58

标签: shell sed

我有一个.txt文件,每行都有sed replace命令,并且有1000多个条目。该文件在我的服务器上。 任何人都可以帮我如何在文件中逐行运行命令并执行到文件末尾。

我的txt文件看起来像

sed -i 's|http://www.myoldsite/url/category/another/blah|http://www.mynewsite.com|g' ./db.sql
sed -i 's|http://www.myoldsite/url/category/blah/blah|http://www.mynewsite.com|g' ./db.sql
sed -i 's|http://www.myoldsite/url/category/blah|http://www.mynewsite.com|g' ./db.sql 

3 个答案:

答案 0 :(得分:1)

您可以通过删除所有sed -i '' ./db.sql来将您的文件转换为替换命令列表。

使用process substitution,然后可以将列表作为传递给sed -f选项的文件进行处理。

sed -i -f <(sed "s/[^']*'//;s/'.*//" file) ./db.sql

答案 1 :(得分:-1)

也许这个有帮助:

for i in $(cat yourfile.txt)
do
    sudo $i
done

修改

为什么选择downvote?

您的问题有多种解决方案。

解决方案1 ​​

在.txt文件中运行每个命令:

通过发出命令使您的.txt文件可执行:

chmod +x yourfile.txt

然后通过发出命令执行它:

./yourfile.txt

解决方案2

创建脚本

#!/bin/sh
FILE=$1
while read line; do
     $line
done < $FILE

使脚本可执行:

chmod +x yourscriptfile.sh

然后通过提供.txt文件作为参数来执行脚本:

./yourscriptfile.sh yourfilewithcommands.txt

希望这有帮助。

答案 2 :(得分:-1)

您可以通过添加

将文件转换为脚本
#!/bin/sh

作为第一行,而不是使文件可执行

chomd u+x file

然后用

运行它
./file

但是,这将非常缓慢。使用所有表达式只运行一次sed要快得多,即将其更改为

sed -i~ 's|http://www.myoldsite/url/category/another/blah|http://www.mynewsite.com|g;
         s|http://www.myoldsite/url/category/blah/blah|http://www.mynewsite.com|g;
         s|http://www.myoldsite/url/category/blah|http://www.mynewsite.com|g
' ./db.sql