我想使用sed更改文件中的一些名称。该文件如下所示:
#! /bin/bash
SAMPLE="sample_name"
FULLSAMPLE="full_sample_name"
...现在我只想使用sed修改sample_name &而不是full_sample_name
我试过了
sed s/\<sample_name\>/sample_01/g ...我原以为\<>可以用来查找完全匹配的内容,但当我使用它时,什么都没有改变。
添加'‘有助于仅更改sample_name。然而,现在还有另一个问题:我的情况比上面解释的要复杂一些,因为我的sed命令嵌入在一个循环中:
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的值。
发布于 2014-11-11 02:54:54
在GNU sed中,以下命令有效:
sed 's/\<sample_name\>/sample_01/' file这里唯一的区别是我用单引号将命令括起来。即使在不需要引用sed命令的情况下,我也看不出这样做有什么坏处(它有助于避免这类问题)。
另一种实现更便携的方法是将引号添加到模式中并替换:
sed 's/"sample_name"/"sample_01"/' script.sh或者,您提出的语法也适用于GNU awk:
awk '{sub(/\<sample_name\>/, "sample_01")}1' file如果要在替换字符串中使用变量,则必须使用双引号而不是单引号,例如:
sed "s/\<sample_name\>/$var/" file变量不会在单引号中展开,这就是为什么您要获取变量的名称而不是其内容的原因。
https://stackoverflow.com/questions/26850806
复制相似问题