用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"