2015-11-04 2 views
0

Я пытаюсь заменить третий столбец файла для себя плюс значение столбца 2 (без пробела). Я получаю правильное значение для переменной c и a, но тогда sed не дает никакого вывода. Любая подсказка?tcsh & sed: no output

#!/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» в конце обозначают номер экземпляра вы хотите, чтобы изменение, которое для второго и третьего столбцов является первым, но вы можете использовать его для любых соседних столбцов.