我想用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
感谢任何帮助,
答案 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练习正则表达式。你可以在现场测试你的表达,他们对令牌有很多很好的解释。