Ошибка при замене частичной строки переменной [дубликат]

У меня возникла ошибка при попытке создать Виртуальная машина на моем сервере 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 без проблем.

1
21.09.2016, 07:39
2 ответа

Я бы написал

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

Думаю, это красиво простой. Дайте мне знать, если у вас возникнут вопросы.

0
27.01.2020, 23:47

Попробуйте:

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.

1
27.01.2020, 23:47

Теги

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