Как POSIX-ly подсчитать количество строк в строковой переменной?

Простой способ исправить это - запретить запуск после установки. rabbitmq-server.postinst находится в / var / lib / dpkg / info , как и все другие сценарии postinst, а версия jessie содержит строки:

# Automatically added by dh_installinit
if [ -x "/etc/init.d/rabbitmq-server" ]; then
        update-rc.d rabbitmq-server defaults >/dev/null
        invoke-rc.d rabbitmq-server start || exit $?
fi

Просто закомментируйте весь этот раздел, и ничего не произойдет. Или вы можете просто закомментировать invoke-rc.d rabbitmq-server start || выход $ .

0
20.11.2018, 22:43
5 ответов

Я не знаю, как это сделать с помощью одной команды sed, поскольку вы хотите удалить последнюю, но не последнюю строку. Вот способ, который я нашел, используя трубу:

sed -e '/^[()]/d' _file_ | sed -e '$s/,$//'

Первый sed удаляет строки, начинающиеся с (или ). Второй sed удаляет запятую в конце строки только из последней строки.

0
28.01.2020, 02:18

Переверните файл, удалите первые 2 строки и удалите запятую в 3-й строке. Затем -переверните результаты.

tac file | sed '1,2d; 3s/,$//' | tac

Для сохранения обратно в тот же файл:

... | tac > tmp && mv tmp file

или, используя spongeиз пакета moreutils:

... | tac | sponge file

Если подумать, это будет отличный способ сделать это. :ed на самом деле редактор файлов , так что вы можете вносить изменения и сохранять.

ed file <<'END'
$-1,$d
$s/,$//
wq
END
3
28.01.2020, 02:18

Не самый эффективный, но должен работать:

sed '$d' file | sed '$d' | sed '$s/,$//'
    FD488AFF,
    FED6ECFF,
    FFA2A2FF,
    FFD7D8FF
2
28.01.2020, 02:18

Чтобы удалить последние две строки по содержимому

см. ответ @LewisMhttps://unix.stackexchange.com/a/483043/4778

Удалить последние две строки по позиции и запятую с конца 3-й с конца.

< «file-name»  head -n -2 | sed -r -e '$ s/,$//'

или

< «file-name»  sed -nr -e 'x;${d;x;d};1d;p' | sed -r -e '$ s/,$//'
-1
28.01.2020, 02:18

Чтобы удалить последние две строки, если они содержат левую и правую скобки и предшествующую им запятую, вы можете использовать скользящее окно:

sed  '1N;$!N;${
s/,\n(\n)//
}
P;D' infile

Это втягивает Nновую строку, когда находится на 1первой строке, а затем всегда сохраняет три строки в пространстве шаблона (черезN;P;D cycle). Когда он доходит до строки la $t, он пытается 1 удалить запятую, за которой следует \newline, (, еще \newline и)


1 :нет необходимости привязывать здесь, поскольку в любой момент времени в пространстве шаблонов не может быть более трех строк.

1
28.01.2020, 02:18

Теги

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