Bash 搜索并替换为sed不工作

Bash 搜索并替换为sed不工作,bash,sed,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 我想将PA144877

我想使用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 

感谢您的帮助,

这是因为
^
意味着线路开始。使用
\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
备注:在OSX(BSD)
sed
上使用:

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

sed的/[[:您正在使用这个标记
^
,意思是
字符串的开头
。它要么是一行的开头,要么是整个文件的开头,但肯定不是一个单词的开头。 因此,这应该是可行的:

sed's/PA14/PA14\ug/file.txt

编辑


我强烈建议您练习正则表达式。您可以在live中测试您的表达式,它们对令牌有很多很好的解释。

^
在行首锚定。
PA14
从不在行首,因此您的搜索永远找不到它。您为什么使用
g
?它出现了不止一次吗每行e?或键入稍少一点:
s/PA14/&