получите части строки с помощью сценария оболочки

Я всегда думал, что это не будет хорошей идеей. Я не глубоко исследовал это, но я сделал параллельные установки 2 или 3 версий Linux на (удаленной) машине, которая должна была продолжить работать максимально долго (который, по моему скромному мнению, является близко к Вашему дополнительному требованию).

Очевидно, существует механизм для установки пакетов к другому разделу, чем активное распределение (например, 'dpkg - корень =/some/dir), но это - просто упаковка. Я был осторожен, что существуют другие вещи, продолжающиеся во время установки, о которой могла бы знать версия X при установке себя с CD, та версия x-1 (или более старый) не знает о. Поэтому я не думаю, что это - хорошая идея установить X с X-1 (но снова, это могло бы быть отсутствие знаний), и я всегда устанавливаю версию X с собой.

Что я делаю для хранения времени простоя работы X-1, минимальная система:

  • загрузите изображение установки для версии X в файл
  • загрузите виртуальную машину (в наше время VirtualBox, но я раньше использовал VMware для того), и установите X из изображения.
  • установите дополнительный материал потребности машины (openssh, и т.д.), который не установлен по умолчанию.
  • настройте вещи как postfix путем копирования main.cf от рабочей машины.
  • В целом поднимите VM и работающий максимально близко к рабочей установке версии x-1, не учтя вещи как pickung электронная почта, которые взаимодействуют со средой non-reversable способом.

Дополнительно (если Ваша машина производительна) достаточно для получения хорошего впечатления, игры с версией X.

В этой точке у Вас есть установка X (настроенный версией X), но это находится на виртуальной машине а не на разделе, который Вы хотите. Следующие шаги:

  • скопируйте все соответствующие файлы от VM до целевого раздела (где используется быть версией x-2). Для этого можно, вероятно, закрыть VM и смонтировать диск VM на хосте, но я успешно сделал это при наличии выполнения, клиент VM делает копию (использование find / -xdev -print0 | cpio -pdmv0 /target/partition/mounted/in/vm)
  • обновите, просто скопированный, fstab из версии X с соответствующими UUID (или устройства) и выбор подкачки (вероятно, может совместно использовать раздел с X-1, пока Вы не в спящем режиме к диску),
  • обновите другие вещи, которые будут отличающимися (например, если Вы не используете DHCP для получения сетевого адреса).
  • сделайте копию /boot/grub/grub.cfg (на X-1)
  • выполненный grub-mkconfig -o /boot/grub/grub.cfg и разность с копией Вы просто сделали. Новое ядро должно быть примечательным как основное изменение.

Теперь у Вас должна быть система двойной загрузки, которая больше не имеет версию x-1 (значение по умолчанию) и X-2 как параметры загрузки, но X-1 (значение по умолчанию) и X. Можно теперь перезагрузить в версии X ручным выбором во время начальной загрузки. Если Вы хотите сделать тот выбор, более постоянный, можно измениться GRUB_DEFAULT= в /etc/default/grub (или измените X-1 систему на перезагрузку по умолчанию в последнем выбранном параметре загрузки),

В какой-то момент, самое позднее прежде, чем идти в версию X+1 и таким образом перезаписать версию x-1, необходимо работать grub-install от версии X, и начинают использовать ее личинку а не ту от X-1.

Если у Вас есть Ваш /home на отдельном разделе затем Вы смогли совместно использовать свой корневой каталог между версиями, но иногда который не работает, поскольку программы делают необратимые преобразования данных конфигурации.

4
31.10.2014, 12:00
6 ответов

попробуйте

 awk 'NR>1 { print $2 } ' /home/pi/mario/BT.txt

, где

  • NR > 1 означает пропуск первой строки. (NR: количество записей)
-121--71739-

Существует пакет с именем gnome-manual-duplex . Это работает для многих принтеров из коробки. Для других может потребоваться ручная настройка.

-121--70082-

Можно использовать awk:

awk -F\/' {print $2 «=» $3, $4 «=» $5} 'input _ file

либо с входным файлом, либо только строкой за строкой.

3
27.01.2020, 20:45

Вы можете просто использовать Cut следующим образом:

cut -d '/' -f 3,5

Пример:

$ echo '/ip/192.168.0.1/port/8080/' | cut -d '/' -f 3,5
192.168.0.1/8080

Это будет вырезать с разделителем / и отпечатки 3 и 5-го полей Отказ

Или вы хотите:

$ echo ip=`cut -d '/' -f 3 input_file` port=`cut -d '/' -f 5 input_file`
ip=192.168.0.1 port=8080
6
27.01.2020, 20:45

Другой чистый путь Bash с использованием массивов:

$ s="/ip/192.168.0.1/port/8080/"        # initial string
$ a=(${s//// })                         # substitute / with " " and make array
$ echo ${a[1]}                          # Array index 1 (zero-based indexing)
192.168.0.1
$ echo ${a[3]}                          # Array index 3 (zero-based indexing)
8080
$ 

или аналогично вышеупомянутому, но с использованием IFS вместо расширения параметра для разделения строки :

$ OLDIFS="$IFS"                         # save IFS
$ IFS="/"                               # temporarily set IFS 
$ a=($s)                                # make array from string, splitting on "/"
$ IFS="$OLDIFS"                         # restore IFS
$ echo "${a[2]}"                        # Array index 2
192.168.0.1
$ echo "${a[4]}"                        # Array index 4
8080
$ 

Обратите внимание, что этот метод потенциально более общий, чем два других в этом ответе в том, что он все равно будет работать, если объекты процентов содержат пробелы.


Или используя позиционные параметры:

$ s="/ip/192.168.0.1/port/8080/"        # initial string
$ set -- ${s//// }                      # substitute / with " " and assign params
$ echo $2                               # Param 2
192.168.0.1
$ echo $4                               # Param 4
8080
$ 
4
27.01.2020, 20:45

Вы можете использовать awk:

awk -f \ / '{print $ 2 "=" $ 3, $ 4 "=" $ 5}' input_file

с входным файлом или просто построчно.

-121--77651-
expr /ip/192.168.0.1/port/8080/ : '.*/port/\(.*\)/'

. * соответствует начальной части строки до / Port

3
27.01.2020, 20:45

Это другой способ

$ cut -d '/' -f 3,5 <<< "/ip/192.168.0.1/port/8080/"|tr -s '/' ' '
192.168.0.1 8080
0
27.01.2020, 20:45

С Bash

s=/ip/192.168.0.1/port/8080/
IFS=/ read -r _ _ ip _ port <<<"$s"
echo "$ip"
192.168.0.1
echo "$port"
8080
3
27.01.2020, 20:45

Теги

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