#file #ubuntu #replace
#файл #ubuntu #заменить
Вопрос:
Моя платформа: рабочая станция Ubuntu Linux
В каталоге у меня есть серия файлов с именем файла xxx_1.in для xxx_50.in
Для каждого файла я хочу заменить abc на def. Если я делаю это по отдельности, я должен ввести:g / abc / s //def / g
Как написать скрипт для обработки всех файлов одновременно?
Комментарии:
1. Я почистил часть грамматики и уточнил название.
2. Вы заменяете
abc
наdef
в содержимом файла или в названии? Я сделаю и то, и другое.
Ответ №1:
sed -i 's/abc/def/g' xxx_*.in
должно быть достаточно
Ответ №2:
Мне нравится Python, даже для написания сценариев в оболочке. Я не могу понять, как использовать sed
, поэтому я придерживаюсь поиска и замены на Python:
#!/usr/bin/env python
import os, glob
for filename in glob('xxx_*.in'):
os.rename(filename , filename .replace('abc', 'def'))
Итак, как встроенный скрипт, который запускается, когда вы копируете / вставляете его в терминал (у меня нет Python на моем текущем компьютере, поэтому никаких гарантий),
python -c "import os, glob; eval('for f in glob('xxx_*.in'):n os.rename(filename , filename .replace('abc', 'def'))'"
Похоже, вы имели в виду содержимое файла. Это, я могу обойтись без Python (надеюсь, это сработает):
for f in xxx_*.in; do sed s/abc/def/g "$f"; done
Комментарии:
1. Обязательно заключите переменную имени файла в кавычки, как в
"$f"
.