首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bash通过sed附加到字符串,但不是在行尾。

bash通过sed附加到字符串,但不是在行尾。
EN

Stack Overflow用户
提问于 2018-02-01 09:31:26
回答 3查看 284关注 0票数 0

我有一个叫做foo.sh的文件

如何编辑/append以下值:

代码语言:javascript
运行
复制
-Dhttp.proxyHost=<yourProxyHost> -Dhttp.proxyPort=<yourProxyPort>

到具有AMBARI_JVM_ARGS内容的文件

代码语言:javascript
运行
复制
foo
bar baz
export AMBARI_JVM_ARGS="$AMBARI_JVM_ARGS -Xms512m -Xmx2048m -XX:MaxPermSize=128m -Djava.security.auth.login.config=$ROOT/etc/ambari-server/conf/krb5JAASLogin.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false"
export PATH=$PATH:$ROOT/var/lib/ambari-server
some
more things

因此所需的结果如下所示:

代码语言:javascript
运行
复制
foo
bar baz
export AMBARI_JVM_ARGS="$AMBARI_JVM_ARGS -Xms512m -Xmx2048m -XX:MaxPermSize=128m -Djava.security.auth.login.config=$ROOT/etc/ambari-server/conf/krb5JAASLogin.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dhttp.proxyHost=<yourProxyHost> -Dhttp.proxyPort=<yourProxyPort>"
export PATH=$PATH:$ROOT/var/lib/ambari-server
some
more things

到目前为止,我无法让它与sed一起工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-01 09:44:01

您的代码已经将文本附加到要修改的变量的前一个值中。假设选项的顺序不重要,只需使用已附加到变量的值调用脚本即可。

代码语言:javascript
运行
复制
AMBARI_JVM_ARGS="$AMBARI_JVM_ARGS -Dhttp.proxyHost=<yourProxyHost> -Dhttp.proxyPort=<yourProxyPort>" ./foo.sh

(这是很长的时间,所以这里有一个可读性的缩短伪代码版本:

代码语言:javascript
运行
复制
var="$var with new value appended" ./foo.sh

例如,用包含前一个值和后缀的值重写var的值,并在命令期间运行具有此临时值的脚本。var=value command命令将var设置为value,运行command,并还原var的原始值。)

编辑脚本的来源似乎是非常糟糕的实践。正确的解决方案几乎总是重构脚本以接受参数。但是你的已经做到了,所以不需要重构--只需要使用已经存在的设备。

票数 1
EN

Stack Overflow用户

发布于 2018-02-01 09:47:26

需要替换正则表达式,如下所示:

代码语言:javascript
运行
复制
sed -ri.bak 's/^(export AMBARI_JVM_ARGS=.*)"$/\1 -Dhttp.proxyHost=<yourProxyHost> -Dhttp.proxyPort=<yourProxyPort>"/g' foo.sh

'-r‘启用正则表达式扩展。我的意思是“就地编辑”,这就是你需要的:修改文件。如果指定了“.bak”,sed将创建“foo.sh.bak”以在更改前保存该文件,您可以忽略“.bak”(但保留“-i”),则不会创建备份文件。

票数 1
EN

Stack Overflow用户

发布于 2018-02-01 09:36:02

如果要在以“导出”开头的行的末尾追加,可以这样做:

代码语言:javascript
运行
复制
sed -i -E "s/export\(.*\)$/export\1<TEXT_TO_APPEND>/" AMBARI_JVM_ARGS
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48559390

复制
相关文章

相似问题

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