【发布时间】:2020-01-22 10:02:43
【问题描述】:
我有一个用于字符替换的代码,但我不知道该代码的错误是什么?有没有一种方法可以更快地处理这段代码,比如为此脚本专门分配几个 cpu 内核?
#!/bin/bash
startdirectory="/data/test/cpy"
searchterm="""
replaceterm=""
i=0;
for file in $(grep -l -R $searchterm $startdirectory)
do
cp $file $file.bak
sed -e s/$searchterm/$replaceterm/ig $file > tempfile.tmp
mv tempfile.tmp $file
let i++;
done
【问题讨论】:
-
在定义变量
searchterm时可能有三引号。我认为您需要转义一句话,只需尝试写:"\"" -
除非您正在执行的处理非常密集,并且从您发布的内容来看并非如此,否则将多个 CPU 内核专用于该任务(这不是一件容易的事情)只会使 I/从磁盘到 RAM 的 O 通道 - 除非您具有与金属文件并行的访问权限。你呢?
-
如果 $searchterm 假设为空或包含单个双引号,您能解释一下吗?如果为空,那么您的代码似乎可以简化为 ...rm -rf $startdirectory... ""
-
由于这是按顺序执行的,因此花费了很多时间。我尝试并行运行并且它有效。谢谢。
-
这是正确的方法。除非您正在执行的处理非常密集,并且从您发布的内容来看并非如此,否则将几个 CPU 内核专用于该任务(这不是一件容易的事情)只会使从磁盘到 RAM 的 I/O 通道过载 - 除非你有平行于金属文件的访问权限
标签: linux bash sed parallel-processing cpu