首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sed中使用变量的“未终止地址regex”

在sed中使用变量的“未终止地址regex”
EN

Stack Overflow用户
提问于 2017-05-29 15:25:53
回答 1查看 1.3K关注 0票数 0

我试图在sed追加中使用一个变量,然后碰到一个问题。

以下命令按预期工作:

代码语言:javascript
复制
sed -i "\:#file = /mnt/var/log/hadoop-yarn/containers/application_1495965866386_0001/container_1495965866386_0001_01_000002/stderr:a file = /path/to/other/file" /etc/conf/service.conf

但是,如果我用变量替换模式,就会碰到一个错误:

代码语言:javascript
复制
$ echo $item
#file = /mnt/var/log/hadoop-yarn/containers/application_1495965866386_0001/container_1495965866386_0001_01_000002/stdout

$ sed -i "\:$item:a file = /path/to/other/file" /etc/conf/service.conf
sed: -e expression #1, char 122: unterminated address regex

编辑获取更多信息:因此“item”变量是从数组中填充的。该数组是从readarray和grep创建的:

代码语言:javascript
复制
$readarray LINES < <(grep "#file = /mnt/var/" /etc/conf/service.conf)
$item=${LINES[1]}

$echo $item
#file = /mnt/var/log/hadoop-yarn/containers/application_1495965866386_0001/container_1495965866386_0001_01_000002/stdout

但是,我发现如果手动填充“item”,它就会工作,例如:

代码语言:javascript
复制
$item="#file = /mnt/var/log/hadoop-yarn/containers/application_1495965866386_0001/container_1495965866386_0001_01_000002/stdout"
$sed -i "\:$item:a file = /path/to/other/file" /etc/conf/service.conf
$

因此,某种奇怪的事情似乎发生在readarray/grep上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-30 09:23:07

所以这里的问题是换行符作为grep的一部分被拉进来了。这就是为什么手动填充$item -没有“\n”

感谢艾德·莫顿为我指明了正确的方向。而

代码语言:javascript
复制
echo "$item" | cat -v

没有显示在readarray命令中添加“-t”以修剪换行符的任何内容:

代码语言:javascript
复制
$readarray -t LINES < <(grep "#file = /mnt/var/" /etc/conf/service.conf)

在那之后,一切都如期而至。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44245956

复制
相关文章

相似问题

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