Помогите с комбинированием команд sed (синтаксис)

Исходя из вашей попытки решения, вот как можно выполнить эту задачу:

find /path/to/cool/stuff                        \         
        -maxdepth 4                             \         
        -type d                                 \          
        -name '*Magic Data*'                    \
        -exec sh -c '
           for d do
              printf "%s: " "$PWD/$d"
              find "$d/." -maxdepth 1 ! -name. -printf "\\n" | wc -l
           done
       ' find_sh {} +

Пояснение:

  • Вплоть до моментаfind-просмотра целевых каталогов ваш рецепт соблюдается.
  • Как только мы находим целевые каталоги, то есть те, в базовых именах которых есть строка «Magic Data», мы собираем их в группу {} +и передаем их оболочке shчерез список аргументов:sh -c '...' find_sh {} +
  • Начальный аргумент sh, который является нулевым аргументом $0, и поэтому ему можно присвоить любое имя, и в данном случае мы называем его find_sh. Это имя будет отображаться в списке процессов.
  • Группа целевых каталогов входит в {} +и формирует аргументы $1 $2 $3...для создаваемой нами оболочки.
  • Внутри этой оболочки, которую мы только что запустили, мы создаем новую строку для каждого файла, найденного в целевых каталогах, кроме самого себя, то есть, ! -name.OTW, имя целевого каталога также учитывается в выводе wc -l.
2
14.08.2020, 11:49
1 ответ
sed -Ei 's/,{,1} {,1}foo = \$(true|false),{,1} {,1}/bar/g' file
sed -Ei 's/(, ){,1}foo = \$(true|false)(, ){,1}/bar/g' file
Флаг

-Eактивирует расширенные регулярные выражения, которые позволяют использование метасимволов (){}|без экранирования.

  • (, ){,1}соответствует от 0 (подразумеваемых )до 1 вхождений , .

  • \$(true|false)соответствует $trueили $false.


Имейте в виду, что

sed -i -e 's/, foo = $true/bar/g' -e 's/, foo = $false/bar/g' -e 's/foo = $true, /bar/g'... file

— это одна команда sed, но с различными скриптами (по одному для каждого -eфлага ).

2
18.03.2021, 23:12

Теги

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