Ответ Фредди работает, но не имеет объяснения . Формат sed
, к которому вы, вероятно, стремитесь, выглядит примерно так:
sed -n 4,6p file1.txt
Где я использовал 4
и 6
как фиктивные числа.
Давайте рассмотрим ваше выражение, снова используя эти фиктивные числа и команду echo
.
$ var1=4
$ var2=6
$ echo "$var1,$var2'p'"
4,6'p'
Поскольку вы заключили '
в "
, они интерпретируются буквально, а вы буквальные '
в команде sed. Следовательно, когда вы пытаетесь запустить свою команду:
$ sed -n "$var1,$var2'p'" file1.txt
sed: -e expression #1, char 4: unknown command: `''
Вы можете удалить '
из своего выражения, но вместо этого имя переменной изменится на $var2p
. Следовательно, как предлагает Фредди, вы можете использовать {…}
для явного включения имени переменной (s ). то есть
sed -n "${var1},${var2}p" file1.txt
Вы можете проверить, работает ли это, поставив эхо перед командой. Альтернативный формат:
sed -n "$var1,$var2"p file1.txt
но ИМО менее читабелен.
Наконец, как SteelDriver указывает , если вы хотите добавить в файл, используйте >> file2.txt
вместо > file2.txt
.
Возможно, whiptail
оставляет терминал в странном состоянии. Попробуйте stty sane
как команду (, вам придется набирать ее вслепую, так что будьте осторожны ). Если это исправит терминал, то, вероятно, проблема в нем.