用sed搜索和替换不工作

时间:2015-10-22 14:08:24

标签: bash sed

我想用sed进行搜索和替换,但它似乎没有用。 我想我犯了一个我无法发现的愚蠢错误。

这是我的file.txt:

PFPR03  PA1448770
PFPR03  PA1448780
PFPR03  PA1448790
PFPR03  PA1448800
PFPR03  PA1448810
PFPR03  PA1448830
PFPR03  PA1448840
PFPR03  PA1448850
PFPR03  PA1448860
PFPR03  PA1448870

我想将PA1448770更改为PA14_48770,即。在PA14之后添加下划线。

以下是我尝试过的几个例子,它们都没有影响文件:

sed 's/^PA14/PA14_/g' file.txt
sed 's/^PA14([0-9]*)/PA14_\1/' file.txt 

感谢任何帮助,

2 个答案:

答案 0 :(得分:1)

这是因为^表示行开始。使用\b作为字边界:

sed 's/\bPA14/PA14_/g' file
PFPR03  PA14_48770
PFPR03  PA14_48780
PFPR03  PA14_48790
PFPR03  PA14_48800
PFPR03  PA14_48810
PFPR03  PA14_48830
PFPR03  PA14_48840
PFPR03  PA14_48850
PFPR03  PA14_48860
PFPR03  PA14_48870

PS:在OSX(BSD)sed上使用:

sed 's/[[:<:]]PA14/PA14_/g' file

答案 1 :(得分:1)

您正在使用此令牌^,这意味着start of string。这可能是一行的开头,也可能是整个文件的开头,但肯定不是一个单词的开头。 所以这应该有效:

sed 's/PA14/PA14_/g' file.txt

修改

我强烈建议您regex101练习正则表达式。你可以在现场测试你的表达,他们对令牌有很多很好的解释。