我需要修改包含此字符串的行上方的文件: [分子类型]
我要执行的插入操作保存在这样的变量中:
ATOMTYPES=$(sed -n '/^\[\ atomtypes\ \]/,/^\[\ moleculetype\ \]/p;/^\[\ moleculetype\ \]/q' LIG_GMX.top | sed '$d')
其中包含以下文本:
[ atomtypes ]
;name bond_type mass charge ptype sigma epsilon Amb
oh oh 0.00000 0.00000 A 3.06647e-01 8.80314e-01 ; 1.72 0.2104
nc nc 0.00000 0.00000 A 3.25000e-01 7.11280e-01 ; 1.82 0.1700
nd nd 0.00000 0.00000 A 3.25000e-01 7.11280e-01 ; 1.82 0.1700
na na 0.00000 0.00000 A 3.25000e-01 7.11280e-01 ; 1.82 0.1700
c3 c3 0.00000 0.00000 A 3.39967e-01 4.57730e-01 ; 1.91 0.1094
ca ca 0.00000 0.00000 A 3.39967e-01 3.59824e-01 ; 1.91 0.0860
ho ho 0.00000 0.00000 A 0.00000e+00 0.00000e+00 ; 0.00 0.0000
h1 h1 0.00000 0.00000 A 2.47135e-01 6.56888e-02 ; 1.39 0.0157
ha ha 0.00000 0.00000 A 2.59964e-01 6.27600e-02 ; 1.46 0.0150
我想要的输出如下:
[ atomtypes ]
;name bond_type mass charge ptype sigma epsilon Amb
oh oh 0.00000 0.00000 A 3.06647e-01 8.80314e-01 ; 1.72 0.2104
nc nc 0.00000 0.00000 A 3.25000e-01 7.11280e-01 ; 1.82 0.1700
nd nd 0.00000 0.00000 A 3.25000e-01 7.11280e-01 ; 1.82 0.1700
na na 0.00000 0.00000 A 3.25000e-01 7.11280e-01 ; 1.82 0.1700
c3 c3 0.00000 0.00000 A 3.39967e-01 4.57730e-01 ; 1.91 0.1094
ca ca 0.00000 0.00000 A 3.39967e-01 3.59824e-01 ; 1.91 0.0860
ho ho 0.00000 0.00000 A 0.00000e+00 0.00000e+00 ; 0.00 0.0000
h1 h1 0.00000 0.00000 A 2.47135e-01 6.56888e-02 ; 1.39 0.0157
ha ha 0.00000 0.00000 A 2.59964e-01 6.27600e-02 ; 1.46 0.0150
[ moleculetype ]
但是,当我使用以下命令时:
sed "/^\[\ moleculetype\ \]/i | echo $ATOMTYPES|" topol.top
或
sed "/^\[\ moleculetype\ \]/i $ATOMTYPES" topol.top
出现以下错误:
sed: -e expression #1, char 50: extra characters after command
答案 0 :(得分:1)
这是错误的做法。 sed用于对单个字符串进行s / old / new。对于更多有趣的事情,您应该使用awk。这可能就是您想要的(未经测试,因为您没有提供我们可以测试的示例输入/输出):
awk '
NR==FNR {
if ( /\[ atomtypes ]/ ) { f=1 }
if ( /\[ moleculetype ]/ ) { f=0 }
if ( f ) {
atomtypes = atomtypes ors $0
ors = ORS
}
next
}
/\[ moleculetype ]/ { print atomtypes }
{ print }
' LIG_GMX.top topol.top
如果您使用的是GNU awk,则可以将f=0
更改为nextfile
以提高效率。