2015-11-04 87 views
0

我试图替换自己的文件的第3列加上列2的值(没有任何空格)。我得到变量c和a的正确值,但sed没有给出任何输出。任何线索?tcsh和sed:没有输出

#!/bin/tcsh 
setenv c `cat lig_mod.pdb | awk '{print $3}'` 
echo $c 
setenv a `cat lig_mod.pdb | awk '{print $3=$3$2}'` 
echo $a 
sed -i "" 's/^'"${c}"'$/^'"${a}"'$/g' lig_mod.pdb 
+0

'sed'命令正在对文件进行操作(来自'-i')。它也与'c'的值本身相匹配,是你想要的吗?它也会用'^ $'替换那一行,这可能不是你想要的。 –

+0

如果我将-i替换为-e(sed不适用),我也没有在文件中进行任何更改。 – schrodingersbird

+0

如果您删除'-i',则'sed'不会更改文件并将其发送到标准输出。我无法分辨您是否正在寻找标准输出,并且之前没有看到它,所以我把它扔进去了。阻止变化发挥作用的主要问题是您的模式和替换都不正确,正如我也指出的那样。模式中的^ ^匹配行的开始,而不是“单词”的开始。行尾的'$'相同。 –

回答

0

即使awk通常用于分析这一个班轮sed列可以更好地为你工作,以及:

sed -i 's/ \(\w*\) \(\w*\)/\1 \2\1 /1' lig_mod.pdb 

的“/ 1”末表示你的愿望实例号更改第二列和第三列是第一列,但您可以将它用于任何相邻的列。