gpt4 book ai didi

sed - 无法使用sed自定义mariadb Dockerfile中的缓冲区大小

转载 作者:行者123 更新时间:2023-12-02 18:55:50 31 4
gpt4 key购买 nike

我正在尝试自定义mariadb容器,以使其具有增加的innodb缓冲区大小。我理想的情况是使用sed,因此我不必维护重复的my.cnf配置文件。

这是我的Dockerfile,但是它并不能像我期望的那样替换该值,而且我不确定自己在做什么错...

FROM mariadb:10.1

RUN sed -ri 's/innodb_buffer_pool_size\\ =\\ 256M/innodb_buffer_pool_size\\ =\\ 512M/g' /etc/mysql/my.cnf \
&& cat /etc/mysql/my.cnf | grep innodb;

输出为:
Sending build context to Docker daemon 231.9 MB
Step 1 : FROM mariadb:10.1
---> 9a0138c02438
Step 2 : RUN sed -ri 's/innodb_buffer_pool_size\\ =\\ 256M/innodb_buffer_pool_size\\ =\\ 512M/g' /etc/mysql/my.cnf && cat /etc/mysql/my.cnf | grep innodb;
---> Running in eaedaf2837ff
#innodb_log_file_size = 50M
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 400
innodb_flush_method = O_DIRECT
#innodb_autoinc_lock_mode=2
#innodb_flush_log_at_trx_commit=0
---> b0e479c55581
Removing intermediate container eaedaf2837ff
Successfully built b0e479c55581

我尝试用 \\来转义空格,而没有运气就不要转义空格。

最佳答案

只是不要像您那样逃避空间:

  • 空间不需要转义
  • 在简单引号内使用 \\进行转义的
  • 实际上创建了\ char。难怪为什么您的正则表达式不起作用。

  • 那个有效:
    sed -i 's/innodb_buffer_pool_size = 256M/innodb_buffer_pool_size = 512M/g' /etc/mysql/my.cnf
  • 如果您真的必须转义某些内容,那将仅是由于正则表达式而不是shell,因为您使用了简单的引号,并且shell无法解释
  • 的内容
  • 对于此特定示例,您不需要-r, --regexp-extended开关。 regexp扩展包括诸如正向查找之类的东西,...这里不需要。

  • 改进:使用组调用匹配的值。如果必须更改参数名称,则维护较少
    sed -i 's/\(innodb_buffer_pool_size\) = 256M/\1 = 512M/g' /etc/mysql/my.cnf

    或匹配多个参数名称
    sed -i 's/\(innodb_buffer_pool_size\|some_other_param\) = 256M/\1 = 512M/g' /etc/mysql/my.cnf

    关于sed - 无法使用sed自定义mariadb Dockerfile中的缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39067322/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com