можно ли заменить строку в двух разных файлах одной командой?

Стандарт:

  1. sudo dpkg -перенастроить локали

Вручную:

  1. sudo nano /etc/locale.gen (раскомментируйте тот, который вы хотите)
  2. sudo locale -gen
  3. обновление sudo -локаль LC _ALL=en _US.UTF -8
  4. выход из системы и вход в систему

Протестирован ручной способ с debian stretch / xfce.

Полную документацию по изменению локалей в debian можно найти в вики debian .

0
10.12.2019, 17:00
3 ответа

Вы можете попробовать:

find. -type f \( -name "*A*.txt" -o -name "*B*.txt" \) \
  -exec sed -i 's/oldString/newString/g' {} +

(здесь также используется +вместо ;, чтобы избежать выполнения одного вызова sedдля каждого файла; также имеет то преимущество, что возвращает не -нулевой статус выхода, если любой из sedвызовов возвращается с не -нулевым статусом выхода ).

3
28.04.2021, 23:26

Если у вас 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
0
28.04.2021, 23:26

Если это действительно просто одна буква , вы можете сделать так:

find. -type f -name "*[AB]*.txt" -exec sed -i 's/oldString/newString/g' {} \;

Для полной ясности, это будет работать только при использовании одной буквы в качестве совпадения.

2
28.04.2021, 23:26

Теги

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