首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在带双引号的前两行末尾添加属性

如何在带双引号的前两行末尾添加属性
EN

Stack Overflow用户
提问于 2018-08-14 04:04:08
回答 3查看 127关注 0票数 0

我们想要添加以下属性:

代码语言:javascript
复制
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M

在包含单词- HBASE_MASTER_OPTS的前两行中

更改前的示例

代码语言:javascript
复制
more ams-hbase-env-template.txt


export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly"
export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=71 -XX:+UseCMSInitiatingOccupancyOnly"
export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=72 -XX:+UseCMSInitiatingOccupancyOnly"
export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=73 -XX:+UseCMSInitiatingOccupancyOnly"

更改后的示例(预期结果)

代码语言:javascript
复制
export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M"
export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=71 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M"
export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=72 -XX:+UseCMSInitiatingOccupancyOnly"
export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=73 -XX:+UseCMSInitiatingOccupancyOnly"

到目前为止我所做的是

代码语言:javascript
复制
sed -i '/HBASE_MASTER_OPTS/ s/$/-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M/' ams-hbase-env-template.txt

但这是不对的,因为

我们希望在双精度结束之前的属性必须只在前两行,即变量是已经在行中的HBASE_MASTER_OPTS

  • in quote

  • properties属性,那么它将不会在任何下一个time!

上再次追加

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-14 07:29:13

这可能适用于您(GNU sed):

代码语言:javascript
复制
sed '/HBASE_MASTER_OPTS/{x;s/^/x/;/^x\{1,2\}$/{x;/-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M/b;s/"\s*$/ -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M"/;x};x}' file

在包含HBASE_MASTER_OPTS的行上,在保留空间中递增一个计数器,如果该计数器包含1或2,并且不包含字符串-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M,则将最后一个"替换为-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M",否则不对该行执行任何操作。

票数 2
EN

Stack Overflow用户

发布于 2018-08-14 06:28:25

代码语言:javascript
复制
awk '/HBASE_MASTER_OPTS/&&/ -XX:\+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M/{x++;print;next}/HBASE_MASTER_OPTS/&&x<2{gsub(/"$/," -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M\"");x++}1' ams-hbase-env-template.txt

测试:

代码语言:javascript
复制
 awk '/HBASE_MASTER_OPTS/&&/ -XX:\+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M/{x++;print;next}/HBASE_MASTER_OPTS/&&x<2{gsub(/"$/," -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M\"");x++}1' example.txt



export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M"

export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=71 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M"

export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=72 -XX:+UseCMSInitiatingOccupancyOnly"

export HBASE_MASTER_OPTS=" -XX:CMSInitiatingOccupancyFraction=73 -XX:+UseCMSInitiatingOccupancyOnly"
票数 2
EN

Stack Overflow用户

发布于 2018-08-14 04:36:13

也许这会给你一些启发:

代码语言:javascript
复制
use strict;
use warnings;

my $i = 0;

while (<>) {
    if ($i < 2 && /HBASE_MASTER_OPTS/ && !/UseGCLogFileRotation/) {
        s/"$/ -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M"/;
        $i++;
    }

    print;
}

用法:

代码语言:javascript
复制
$ perl a.pl foo.txt
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51829807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档