Замените строку, содержащую переменные и пробел, командами bash - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть несколько файлов, содержащих строки, некоторые из них похожи на показанные ниже:

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

Но ожидаемый результат не был получен. Интересно, что по эхо-переменной G это:

"2FN     1" 

но sed не заменяет на

"2FN D   1"

У вас есть предложения?

Спасибо

1 Ответ

0 голосов
/ 01 ноября 2018

Проблема в том, что вы пытаетесь получить bash для разрешения переменных в одинарных кавычках. Одиночные кавычки говорят bash: «Здесь ничего не разрешайте, воспринимайте буквально как есть»

Если вы просто замените одинарные кавычки в своей команде sed на двойные кавычки, как подсказывает @oguzismail, у вас все будет в порядке.

Более подробно, если необходимо, здесь: https://stackoverflow.com/a/13802438/236528

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...