У меня возникла ошибка при попытке создать Виртуальная машина на моем сервере Centos 6.9 (для файла ОС (Windows 10) отказано в разрешении), я скопировал файл с DVD в каталог на узле (/ virt), я проверил контекст / etc / libvirt / qemu
и изменил контекст каталога / virt
на то, что ожидалось:
$ ls -lZ
-rw-r--r--. root root system_u:object_r:virt_etc_t:s0 qemu.conf
$ls -lz
drwxr-xr-x. root root system_u:object_r:virt_etc_rw_t:s0 virt
Я сделал это, добавив тип контекста:
semanage -a -t virt_etc_rw_t '/virt(/.*)?'
Затем,
$ restorecon -RFvv /virt
127 semanage fcontext -l qemu
145 semanage fcontext -a -t virt_etc_rw_t '/virt(/.*)?'
210 history | grep semanage
[root@centos libvirt]# history | grep restore
146 restorecon -RFvv /virt
и затем я смог использовать файл ISO без проблем.
Я бы написал
awk '
BEGIN { FS = OFS = "=" }
FILENAME == "file1" {
tag[FNR] = $0
}
FILENAME == "file2" {
str[$0] = FNR
}
FILENAME == "file3" {
if ($NF in str) $NF = tag[str[$NF]]
print
}
' file1 file2 file3
Думаю, это красиво простой. Дайте мне знать, если у вас возникнут вопросы.
Попробуйте:
awk 'FNR==NR{a[FNR]=$0; next} NR<=length(a)+FNR{b[FNR]=$0; next} {for (i=1;i<=length(a);i++) gsub(a[i], b[i])} 1' file2 file1 file3
Например:
$ awk 'FNR==NR{a[FNR]=$0; next} NR<=length(a)+FNR{b[FNR]=$0; next} {for (i=1;i<=length(a);i++) gsub(a[i], b[i])} 1' file2 file1 file3
aws ec2 create-tags --region us-east-1 --resourcesi-XXXXX --tags Key=Developer Name,Value=XXXXX Key=Resource Group,Value=my_custom_tag_1
aws ec2 create-tags --region us-east-1 --resourcesi-XXXX --tags Key=Developer Name,Value=XXXXX Key=Resource Group,Value=my_custom_tag_2
FNR == NR {a [FNR] = $ 0 ; next}
Это сохраняет все строки в файле2 в массиве a
.
FNR - это количество строк, прочитанных из текущего файла. NR - общее количество прочитанных строк. Таким образом, если FNR == NR
, мы читаем первый именованный файл, file2
. a [FNR] = $ 0
добавляет текущую строку, обозначенную $ 0
, в массив a
под ключом FNR.
Команда next
указывает awk пропустить оставшиеся команды и начать заново со строки next
.
NR <= длина (a) + FNR {b [FNR] = $ 0; next}
Это сохраняет все строки файла file1 в массиве b
.
Здесь мы используем аналогичный тест, NR <= length (a) + FNR
, чтобы определить, читаем ли мы второй файл. b [FNR] = $ 0
добавляет текущую строку, обозначенную $ 0
, в массив b
под ключом FNR.
Команда next
указывает awk пропустить оставшиеся команды и начать заново со строки next
.
for (i = 1; i <= length (a); i ++) gsub (a [i], b [i])
Если мы попали сюда, мы читаем третий файл. Это заменяет любой текст, соответствующий строке в файле2, на соответствующий текст из файла1.
Цикл for (i = 1; i <= length (a); i ++)
перебирает номер каждой строки в массиве a
.
gsub (a [i], b [i])
заменяет любое вхождение текста a [i]
на текст b [i]
.
Обратите внимание, что текст в file2 обрабатывается как регулярное выражение. Если вам нужно, чтобы в этом файле были какие-либо символы, активные для регулярных выражений, их следует экранировать.
1
Это загадочное сокращение awk для print-the-line.