加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 为多个sed替换优化shell脚本

发布时间:2020-12-15 17:01:42 所属栏目:安全 来源:网络整理
导读:我有一个文件,其中包含替换对的列表(大约100个),sed用它来替换文件中的字符串. 对如下: old|newtobereplaced|replacement(stuffiwant).*(too)|12 我目前的代码是: cat replacement_list | while read ido old=$(echo "$i" | awk -F'|' '{print $1}') #du
我有一个文件,其中包含替换对的列表(大约100个),sed用它来替换文件中的字符串.

对如下:

old|new
tobereplaced|replacement
(stuffiwant).*(too)|12

我目前的代码是:

cat replacement_list | while read i
do
    old=$(echo "$i" | awk -F'|' '{print $1}')    #due to the need for extended regex
    new=$(echo "$i" | awk -F'|' '{print $2}')
    sed -r "s/`echo "$old"`/`echo "$new"`/g" -i file
done

我不禁想到有一种更优化的方式来进行替换.我尝试先转动循环以首先运行文件的行,但结果却要贵得多.

有没有其他方法来加速这个脚本?

编辑

感谢所有快速回复.在选择答案之前,让我尝试各种建议.

要澄清一件事:我还需要子表达式/组功能.例如,我可能需要的一个替换是:

([0-9])U|10  #the extra brackets and escapes were required for my original code

有关改进的一些细节(待更新):

>方法:处理时间
>原始剧本:0.85s
>切割而不是awk:0.71s
> anubhava的方法:0.18s
> chthonicdaemon的方法:0.01s

您可以使用sed生成正确格式化的sed输入:
sed -e 's/^/s|/; s/$/|g/' replacement_list | sed -r -f - file

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读