Использование awk для извлечения строки между разными символами

Существует стандартный инструмент для шифрования файла :GnuPG (, также называемый GPG ). Это стандартизированный формат, и вы можете вызывать gpg из любого языка программирования.

Если вы вводите буквы A -E -S в свой код, вы делаете это неправильно . Очевидно, что вам не нужно шифровать файл с помощью AES, иначе потребуется определенный формат. Таким образом, ваше требование состоит в том, чтобы зашифровать файл , точка. Так что вызовите инструмент шифрования файлов, и пусть он беспокоится об использовании AES.

3
19.01.2020, 16:16
6 ответов
$ VBoxManage showvminfo 'Test Machine' --machinereadable | sed -n '/^UUID=/{ s///; s/"//gp; }'
1ce7ffef-8faa-4138-9b92-466698762f62

Вместо использования команды list vmssub -используется команда sub -showvminfo, которая получает всю информацию для конкретной машины (здесь VM с именемTest Machine). В --machinereadableэто выводит данные в форме, которую легко анализировать. UUID виртуальных машин будет выводиться как

UUID="1ce7ffef-8faa-4138-9b92-466698762f62"

, который обнаруживает команда sed. Он удаляет бит UUID=и все двойные кавычки, а затем печатает все, что осталось.

Команду sedможно записать несколькими способами. Вариант, например,

sed -n 's/^UUID="\(.*\)"$/\1/p'
0
27.01.2020, 21:08

Вот как бы я это сделал, используя P.E. и синтаксис bash.

while read -r vmname uuid; do
  uuid=${uuid##*'{'}
  uuid=${uuid%'}'*}
  vmname=${vmname#*'"'}
  vmname=${vmname%'"'*}
  printf '%-15s %s\n' "$vmname" "$uuid"
done < <(VBoxManage list vms)

Вы можете запустить vms внутри цикла с совпадением, используя тест, или сохранить вывод в массиве и так далее. Это также должно быть безопасно, даже если в имени виртуальной машины есть {или }. Я использую этот код в своем скрипте с 2013 года:-)

0
27.01.2020, 21:08

- Разделитель полей F в awk. Здесь мы используем 2 разделителя полей. (либо { либо })

VBoxManage list vms | awk -F"[{}]" '/Test Machine/{print $2}' 
8
27.01.2020, 21:08

Другой способ.

VBoxManage list vms | awk -F ' ' '{print substr($2, 2, length($2) - 2)}'

Разделяйте поля пустым пространством

awk -F ' '

Печатать второй столбец, удаляя первый {и последний }символы

'{print substr($2, 2, length($2) - 2)}'
3
27.01.2020, 21:08

Gnu grep (использует Perl -регулярное выражение stye):

grep -Po "(?<={)[a-f0-9-]+(?=})" 

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

С простым grep

grep -Eo "([a-f0-9-]+-){4}[a-f0-9-]+"

... т. е. 5 групп шестнадцатеричных цифр, разделенных тире.

2
27.01.2020, 21:08
  VBoxManage list vms|  awk -F "{" '/Test Machine/{gsub("}","",$NF);print $NF}'

выход

9d0953a7-ca2a-4667-8c5b-1a9f550b2956
0
27.01.2020, 21:08

Теги

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