Удалить N строки после шаблона и строки M Paint Pattern Pattern

Вы можете сделать это, добавив записи для репозитория Ubuntu в файл в /etc/apt/sources.list.d . Но вы не должны этого делать, в том же смысле, что хотя пересечение оживленной 6-полосной автомагистрали пешком физически возможно, обычно это не рекомендуется.

Смешивание репозиториев из разных выпусков дистрибутивов, даже если в этих дистрибутивах используется один и тот же менеджер пакетов, обычно не работает должным образом, потому что разные выпуски имеют разные наборы версий библиотек. Хотя Debian и его производные (как и большинство дистрибутивов) позволяют одновременно устанавливать несколько версий библиотек, это не всегда распространяется на другие пакеты, которые иногда зависят от конкретных версий библиотек. Некоторое время это может сработать, если вы не устанавливаете пакеты разработки (пакеты разработки, как правило, имеют точные требования к библиотеке), но рано или поздно вы практически наверняка столкнетесь с конфликтами.

Из-за несовместимости библиотек PPA имеют отдельные источники двоичных пакетов для каждого выпуска Ubuntu. Смешивание выпуска Debian и выпуска Ubuntu аналогично смешиванию разных выпусков Ubuntu.

Если вам нужны драйверы Ubuntu, самые простые решения устанавливают Ubuntu. Низкоуровневое программное обеспечение (ядро, основные системные утилиты, X-сервер и библиотеки), как правило, должно формировать единое целое.Обычно безопасно устанавливать более новое ядро, но вам также необходимо установить соответствующие видеодрайверы X, по крайней мере, если вы используете проприетарные драйверы, и вам нужна конфигурация, а иногда и исправления, которые ожидает дистрибутив (а также Debian и Ubuntu не настраивайте их ядро ​​точно так же).

Для пользователя и администратора нет большой разницы между Ubuntu и Debian. По какой бы причине вы ни предпочли Debian, если в последней версии Ubuntu есть драйверы для вашего оборудования, а Debian отстает (не редкость, если вы придерживаетесь стабильной версии Debian), лучше всего перейти на Ubuntu.

Если вы абсолютно хотите иметь некоторые пакеты из Ubuntu и некоторые пакеты из Debian - или если вы хотите иметь пакеты из разных выпусков Debian / Ubuntu (это особенно полезно для разработчиков, которые хотят протестировать свои сборки на разных поколениях программного обеспечения ), довольно легко установить дополнительные выпуски Debian / Ubuntu в chroot , поэтому вы запускаете один выпуск для своей системы, но можете запускать приложения из другого выпуска.

2
07.10.2018, 20:05
2 ответа

Допустим, у вас есть файл-numbers.list:

1
2
3
4
5
6
7
8
9

Вот скрипт, который должен выполнить то, что вам нужно:

#!/bin/bash
if [ -z "$1" ]; then
    echo >&2 "error: no file specified"
    exit 1
fi
if [ ! -f "$1" ]; then
    echo >&2 "error: $1 is not a file"
    exit 1
fi
if [ -z "$2" ]; then
    echo >&2 "error: no pattern specified"
    exit 1
fi
grep "$2" "$1" >/dev/null 2>&1
if [ ! 0 -eq "$?" ]; then
    echo >&2 "error: pattern $2 not found in $1"
    exit 1
fi
MATCH_FILE="$1"
MATCH_PATTERN="$2"
MATCH_DELETE_AFTER=0
MATCH_DELETE_BEFORE=0
if [ ! -z "$3" ]; then
    MATCH_DELETE_AFTER="$3"
fi
if [ ! -z "$4" ]; then
    MATCH_DELETE_BEFORE="$4"
fi
MATCH_FILE_LINE="$( grep -n "$2" "$1" | cut -d: -f1 )"
#
# print matching `head` minus MATCH_DELETE_BEFORE lines
cat "$1" \
    | head -n "$( expr "$MATCH_FILE_LINE" - "$MATCH_DELETE_BEFORE" - 1 )"
#
# print matching line
cat "$1" \
    | head -n "$MATCH_FILE_LINE" \
    | tail -n 1
#
# print matching `tail` minus MATCH_DELETE_AFTER lines
cat "$1" \
    | tail -n "$( expr "$( wc -l "$1" | cut -d' ' -f1 )" - "$MATCH_FILE_LINE" - "$MATCH_DELETE_AFTER" )"

Пример использования:./matching.sh numbers.list 5 2 3

Примечание:Это решение не будет работать должным образом, если exprоценивает отрицательные значения -до вас, если вы хотите реализовать проверки, чтобы избежать такого поведения.

2
27.01.2020, 21:55

Чтобы ответить на вашу общую ситуацию, мы заранее создадим соответствующий edкод на основе введенных данных.

 re=5 n=2 m=3
 code=$(
   prev="/$re/-$m,/$re/-1d"
   next="/$re/+1,/$re/+${n}d"
    case "$m/$n" in
       0/0) set -- ;;
       0/?*) set -- "$next" "w" ;;
       ?*/0) set -- "$prev" "w" ;;
         *) set -- "$prev" "$next" "w" ;;
    esac
    printf '%s\n' ${1+"$@"} "q" 
 ) 
 ed -s filename - <<eof
 $code
 eof

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

 n=3 m=2 re=5
 ed -s filename - <<eof
 /$re/-$m,/$re/-1d
.+1,.+${n}d
 wq
 eof

Пояснение:

 1. Line 3 after var substitution becomes
            /5/-2,/5/-1
      What it does is, sitting on line which satisfies the regex /5/, it looks 2 lines behind and stops looking 1 line before the /5/ line or the current line and deletes that bunch. Remember the current line is not deleted.

   2.  Line 4, after var sub becomes
               .+1,.+3d
      . is the nickname for the current line, which in our case is /5/
       So, starting fron one line after the current upto 3 lines after the current, delete them all. Note the current line is still untouched.

  3. Line 5 is wq which means save the modified file back onto itself and quit.

For more on info google the manual for gnu ed editor. 
3
27.01.2020, 21:55

Теги

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