Стандарт:
Вручную:
Протестирован ручной способ с debian stretch / xfce.
Полную документацию по изменению локалей в debian можно найти в вики debian .
Вы можете попробовать:
find. -type f \( -name "*A*.txt" -o -name "*B*.txt" \) \
-exec sed -i 's/oldString/newString/g' {} +
(здесь также используется +
вместо ;
, чтобы избежать выполнения одного вызова sed
для каждого файла; также имеет то преимущество, что возвращает не -нулевой статус выхода, если любой из sed
вызовов возвращается с не -нулевым статусом выхода ).
Если у вас GNU find
, вы можете использовать -regex
вместо -name
и сделать что-то вроде
find. -type -f -regextype egrep -regex "(.*A.*|.*B.*)\.txt" -exec sed -i 's/oldString/newString/g' {} \;
Обратите внимание , что если шаблон может также отображаться в пути к файлам, регулярное выражение необходимо изменить (в соответствии с комментарием @StéphaneChazelas )на
-regex ".*(A|B)[^/]*\.txt"
, чтобы исключить все, где /
стоит после шаблонов.
Вы можете проверить, доступен ли тип регулярного выражения egrep
, используя
find -regextype help
Если это действительно просто одна буква , вы можете сделать так:
find. -type f -name "*[AB]*.txt" -exec sed -i 's/oldString/newString/g' {} \;
Для полной ясности, это будет работать только при использовании одной буквы в качестве совпадения.