首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sed替换完全匹配

sed替换完全匹配
EN

Stack Overflow用户
提问于 2014-11-11 02:50:46
回答 3查看 51.9K关注 0票数 15

我想使用sed更改文件中的一些名称。该文件如下所示:

代码语言:javascript
运行
复制
#! /bin/bash

SAMPLE="sample_name"
FULLSAMPLE="full_sample_name"

...

现在我只想使用sed修改sample_name &而不是full_sample_name

我试过了

代码语言:javascript
运行
复制
sed s/\<sample_name\>/sample_01/g ...

我原以为\<>可以用来查找完全匹配的内容,但当我使用它时,什么都没有改变。

添加'‘有助于仅更改sample_name。然而,现在还有另一个问题:我的情况比上面解释的要复杂一些,因为我的sed命令嵌入在一个循环中:

代码语言:javascript
运行
复制
while read SAMPLE
do
    name=$SAMPLE
    sed -e 's/\<sample_name\>/$SAMPLE/g' /path/coverage.sh > path/new_coverage.sh
done < $1

因此,应该使用附加到$SAMPLE的值来更改sample_name。但是,在运行命令时,sample_name将更改为$SAMPLE,而不是附加到$SAMPLE的值。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-11 02:57:28

我相信\<\>可以使用gnu sed,你只需要引用sed命令:

代码语言:javascript
运行
复制
sed -i.bak 's/\<sample_name\>/sample_01/g' file
票数 23
EN

Stack Overflow用户

发布于 2014-11-11 02:54:54

在GNU sed中,以下命令有效:

代码语言:javascript
运行
复制
sed 's/\<sample_name\>/sample_01/' file

这里唯一的区别是我用单引号将命令括起来。即使在不需要引用sed命令的情况下,我也看不出这样做有什么坏处(它有助于避免这类问题)。

另一种实现更便携的方法是将引号添加到模式中并替换:

代码语言:javascript
运行
复制
sed 's/"sample_name"/"sample_01"/' script.sh

或者,您提出的语法也适用于GNU awk:

代码语言:javascript
运行
复制
awk '{sub(/\<sample_name\>/, "sample_01")}1' file

如果要在替换字符串中使用变量,则必须使用双引号而不是单引号,例如:

代码语言:javascript
运行
复制
sed "s/\<sample_name\>/$var/" file

变量不会在单引号中展开,这就是为什么您要获取变量的名称而不是其内容的原因。

票数 6
EN

Stack Overflow用户

发布于 2016-03-29 15:19:40

邮箱:@user1987607

您可以通过以下方式完成此操作:

示例sed s/“sample_name”>/_01/g

其中引号“”中的"sample_name“与确切的字符串值匹配。

/g用于全球替代。

如果"sample_name“像这样的ifsample_name出现,并且您也想替换它,那么您应该使用以下代码:

sed s/"sample_name ">/"sample_01 "/g

因此它只替换所需的单词。例如,上面的语法将替换文本文件中的单词" the“,而不是像这样的单词。

如果您对只替换第一个实例感兴趣,那么这将很好地工作。

示例sed s/“sample_name”/_01/

希望能有所帮助

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

https://stackoverflow.com/questions/26850806

复制
相关文章

相似问题

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