SED / awk Чтобы удалить двойные кавычки «которые находятся внутри фигурных скобок {}

От man mount:

       -t, --types vfstype
              The  argument following the -t is used to indicate the
              filesystem type.  The filesystem types which are  cur‐
              rently  supported  include:  adfs, affs, autofs, cifs,
              [ . . . ]

И proc, среди прочих. Поэтому аргумент -t принимает один из нескольких типов файловых систем, а не /a/directory/name. Mount, как обычно, принимает имя системы, которую вы хотите смонтировать, а затем каталог, в который смонтирована система. Таким образом, ваша команда будет выглядеть так:

mount --rbind /sys $chroot_dir/sys/
mount --rbind /dev $chroot_dir/dev/
mount -t proc /proc $chroot_dir/proc/

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

5
07.08.2018, 19:22
3 ответа

Было бы проще сsed:

sed -e :1 -e 's/\({[^}]*\)"\([^}]*}\)/\1\2/g; t1'

илиperl:

perl -pe 's{\{.*?\}}{$& =~ s/"//gr}ge'

Обратите внимание, что предполагается отсутствие вложенных {...}.

Для обработки вложенных {...}вы можете использовать perlвозможности рекурсивного регулярного выражения:

perl -pe 's(\{(?:[^{}]++|(?0))*\})($& =~ s/"//gr)ge'

С помощью sedвыходим наружу, чтобы избежать внутренних {...}s перед удалением "s:

sed 's/_/_u/g
     :1
     s/\({[^{}]*\){\([^{}]*\)}/\1_<\2_>/g; t1
     :2
     s/\({[^}]*\)"\([^}]*}\)/\1\2/g; t2
     s/_</{/g; s/_>/}/g;s/_u/_/g'
9
27.01.2020, 20:35

Попробуйте это, используяsed:

$ sed -r ' :L; s/(\{[^"}]*)"(([^"}]*")*)([^"}]*\})/\1\2\4/g; tL; ' file
1
27.01.2020, 20:35

awkдля вложенных раскосов:

    awk -F{ '
            {for (i=2; i<=NF; i++)  {if (1 == n = split ($i, T, "}")) n++ 
                                     for (j=1; j<n; j++)    {RS = index ($i, T[j])
                                                             L = gsub (/"/, _, T[j])
                                                             $i = substr ($i, 1, RS-1)  T[j]   substr ($i, RS + length (T[j]) + L)
                                                            }
                                    }
            }
    1' OFS="{" file

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

0
27.01.2020, 20:35

Теги

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