Копирование строк из одного файла в другой с помощью sed и переменных оболочки

Заменить echo="$folder"наecho "$folder"

То же дляecho="$input"

Здесь эхо действует как переменная. =попытается присвоить ему значение, а не выполнить команду echoсамостоятельно. Если после echo="$folder"вы запустите echo $echo, вы получите значение pwd.

Воспроизведение вашего результата;

/home/test$ folder="$PWD"
/home/test$ echo="$folder"
/home/test$ echo "$echo"
/home/test
0
27.08.2019, 08:39
2 ответа

Ответ Фредди работает, но не имеет объяснения . Формат 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.

2
28.01.2020, 02:39

Используйте фигурные скобки вокруг имен ваших переменных:

sed -n "${var1},${var2}p" file1.txt > file2.txt

Скобки вокруг первой переменной не нужны, но лучше сделать ее согласованной.

0
28.01.2020, 02:39

Теги

Похожие вопросы