用bash命令替换包含变量和空间的行

用bash命令替换包含变量和空间的行,bash,sed,replace,space,Bash,Sed,Replace,Space,我有一些包含行的文件,其中一些类似于如下所示: HETATM 2340 C2 2FN 1 15.566 27.839 11.677 1.00 24.33 C 我需要换一个 2FN 1 到 最终结果是: HETATM 2340 C2 2FN 1 15.566 27.839 11.677 1.00 24.33 C 通过使用sed命令,这是相当容易的,在这种情况下,您总是有相同的单词来替换

我有一些包含行的文件,其中一些类似于如下所示:

HETATM 2340  C2  2FN     1      15.566  27.839  11.677  1.00 24.33           C
我需要换一个

2FN     1 

最终结果是:

HETATM 2340  C2  2FN     1      15.566  27.839  11.677  1.00 24.33           C
通过使用sed命令,这是相当容易的,在这种情况下,您总是有相同的单词来替换

sed 's/2FN     1/2FN D   1/g' input.file > output.file
然而,在这种情况下,我们希望使用变量

A="2FN"
B="1"
在sed命令中,由于要替换的文本中有多个空格,因此结果不是预期的结果

我尝试了几种方法,例如:

A="2FN"
B="1"
S='     '
G=$(echo "$LIG${S}$LIGN")
sed 's/$G/2FN D   1/g' input.file > output.file
但没有得到预期的结果。 有趣的是,echo G变量为:

"2FN     1" 
但sed并不能取代

"2FN D   1"
你有什么建议吗


谢谢

问题是您试图让
bash
解析单引号中的变量。单引号告诉bash:“不要在这里解析任何内容,照字面意思理解”

如果您只是像@oguzismail建议的那样,用双引号替换sed命令中的单引号,您就可以了

更多详细信息(如需要)请参见:

请尝试
sed“s/$G/2FN D 1/G”…
不确定是否正确定义了
G
,但您没有在单引号内使用变量。如果要在字符串中使用变量,请使用双引号,
“s/$G/2FN D 1/G”
实际上,我从未使用过双引号。就这样,它起作用了。谢谢你的建议我没有注意@oguzismail建议的双引号。实际上,它是通过使用它来工作的。再次感谢
"2FN D   1"