sed не работает с командой find -exec?

Вместо Slax можно использовать Puppy Linux. Он загружается и запускается из оперативной памяти, а затем сохраняет ваши изменения при завершении работы. Puppy не предоставляет средства для прямого использования APT, но упомянутые вами инструменты, вероятно, имеют.debs в репозиториях Debian и/или Ubuntu, и у Puppy есть инструмент для преобразования их в пакеты Puppy Pet Packages для установки. Возможно, они уже доступны в диспетчере пакетов Puppy.

0
17.05.2020, 23:23
1 ответ

В верхней части вы ссылаетесь на имя файла file.txt, но затем имеете дело только с файлами с именем config.yml, поэтому я предполагаю, что config.ymlсодержит эти шаблоны.

Теги locateиbashвводят в заблуждение, так как это не имеет ничего общего с обоими :). Что еще более важно, что это за среда? В системах LinuxGNU/sed обычно устанавливается и требует опции -E, чтобы понять условие swipe|pinch. Скобочные выражения (часть [0-9]вашего шаблона )работает даже без -E.

Таким образом, с учетом этого, следующее работает с GNU/sed и BSD/sed:

locate config.yml | while read -r i; do sed -E '/swipe|pinch/s/[0-9]/3/' "$i"; done

Или, сfind:

find. -name config.yml -exec sed -E '/swipe|pinch/s/[0-9]/3/' '{}' +

NB :ваш шаблон /swipe|pinch/был правильным, предложение изменить его, чтобы избежать символа вертикальной черты на /swipe\|pinch/, не будет работать, так как теперь это больше не регулярное выражение и будет соответствовать литералу |и, следовательно, не будет соответствовать ни одному содержимому вашего файла. Однако это будет работать, если окружающие апострофы(')опущены:

sed -E /swipe\|pinch/s/[0-9]/3/
1
28.04.2021, 23:13

Теги

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