LINUX.ORG.RU

автозамена(?) в sed

 , , ,


0

1

Пытаюсь удалить всё, кроме $var, по счёту, строки:

dumbuser@pleasehelpme$ var=4; echo -e "s1\ns2\ns3\ns4\ns5\ns6\ns7" | sed "${var}!d"
var=4; echo -e "1\n2\n3\n4\n5\n6\n7" | sed "${var}du -h"
sed: -e выражение #1, символ 3: лишние символы после команды
Экранировать '${var}!d' не могу - не будет читать переменную.

В zsh ненастроенном тоже не пашет:

dumbuser@pleasehelpme$ var=4; echo -e "s1\ns2\ns3\ns4\ns5\ns6\ns7" | sed "${var}!d"
zsh: event not found: d

ЧЯДНТ?

Дополнено: Хм. в sh всё работает:

sh-5.0$ var=4; echo -e "s1\ns2\ns3\ns4\ns5\ns6\ns7" | sed "${var}!d"
s4

zsh: event not found: d

ЧЯДНТ?

Не экранируешь !.

Экранировать ‘${var}!d’ не могу - не будет читать переменную.

Можешь: "${var}\!d", или "${var}"'!d' (обрати внимание на отсутствие пробела между "" и '').

mord0d ★★★ ()
Ответ на: комментарий от basarga

Первый пример из bash

Я bash не пользуюсь, не могу знать, что у него есть !.

третий из sh

Скорее всего тоже из bash в режиме совместимости (/bin/sh в Linux почти всегда является симлинком на /bin/bash).

mord0d ★★★ ()

Экранировать '${var}!d' не могу - не будет читать переменную.

Ну и если var целочисленное, как тут по логике программы, то экранировать не обязательно: $var\!d или $var'!d'

vodz ★★★★★ ()