【问题标题】:Replace line containing variables and space by bash commands用 bash 命令替换包含变量和空格的行
【发布时间】:2019-04-05 23:11:20
【问题描述】:

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

HETATM 2340  C2  2FN     1      15.566  27.839  11.677  1.00 24.33           C

我需要更换

2FN     1 

2FN D   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"

你有什么建议吗?

谢谢

【问题讨论】:

  • 试试sed "s/$G/2FN D 1/g" ...
  • 不确定您是否正确定义了G,但您没有使用单引号内的变量。如果要在字符串中使用变量,请使用双引号,"s/$G/2FN D 1/g"
  • 其实我从来没有用过双引号。这样它就可以工作了。感谢您的建议

标签: bash sed replace space


【解决方案1】:

问题是您试图让bash 解析单引号内的变量。单引号告诉bash:“不要在这里解决任何问题,按原样处理”

如果您只是按照@oguzismail 的建议将 sed 命令中的单引号替换为双引号,就可以了。

更多细节,如果需要,在这里: https://stackoverflow.com/a/13802438/236528

【讨论】:

  • 我没有注意@oguzismail 建议的双引号。实际上,它通过使用 that 来工作。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 2021-03-20
  • 1970-01-01
相关资源
最近更新 更多