удалить определенный символ/символы из файлов рекурсивно в Ubuntu

удалить определенный символ/символы из файлов рекурсивно в Ubuntu

У меня есть 8000 с лишним файлов, и мне нужно их очистить. В настоящее время я использую эту команду sed для замены определенных символов на те, которые мне нужны:

find . -name "*.txt" -print | xargs sed -i 's/a/z/g'

Это рекурсивно меняет все a во всех файлах на z. Мой вопрос:

  1. Могу ли я указать несколько символов для сопоставления в команде, которую нужно изменить на z?
  2. Могу ли я удалить совпадающий символ вместо того, чтобы менять его на z?

Заранее спасибо.

решение1

Могу ли я указать несколько символов для сопоставления в команде, которую нужно изменить на z?

Да, можно. Это можно сделать, заключив несколько символов в квадратные скобки:

sed -i 's/[abc]/z/g' file.txt

Это заменит всеа,б, исперсонажи сз.
Это не заменитазбукасз, он заменит его наззз.

Могу ли я удалить совпадающий символ вместо того, чтобы менять его на z?

Это очень просто, просто замените его ничем:

sed -i 's/[abc]//g' file.txt

Это удалит всеа,б, исперсонажи.

Примечание: эти примеры также работают в вашем случае с find& xargs.

решение2

На оба вопроса можно ответить «да»:

1: Это можно сделать, используя так называемый класс символов [abcde], например

echo abcabcabc | sed -e 's/[abc]/z/g'

который заменяет все три a, b, c на z.

2: Если заменить на пустую строку, то будут удалены все соответствующие символы, например:

echo abcabcabc | sed -e 's/[ac]//g'

вы получаете только «б» обратно.

Связанный контент