Как заменить строку в файле php
Как я могу заменить строку в файле (ах)?
Мне нужно было что - то , что бы обеспечить всухую вариант и будет работать рекурсивно с Glob, и после попытки сделать это с awk
и sed
я отказался и вместо этого сделал это в питона.
Скрипт ищет рекурсивно все файлы , соответствующие шаблон Глоба (например --glob="*.html"
) для регулярных выражений и заменяет регулярное выражение замены:
find_replace.py [--dir=my_folder] \ --search-regex=<search_regex> \ --replace-regex=<replace_regex> \ --glob=[glob_pattern] \ --dry-run
Каждый длинный вариант , такие как --search-regex
есть соответствующий короткий вариант, то есть -s
. Запустите с, -h
чтобы увидеть все варианты.
Например, это перевернет все даты с 2017-12-31
на 31-12-2017
:
python replace.py --glob=myfile.txt \ --search-regex="(\d{4})-(\d{2})-(\d{2})" \ --replace-regex="\3-\2-\1" \ --dry-run --verbose
import os import fnmatch import sys import shutil import re import argparse def find_replace(cfg): search_pattern = re.compile(cfg.search_regex) if cfg.dry_run: print('THIS IS A DRY RUN -- NO FILES WILL BE CHANGED!') for path, dirs, files in os.walk(os.path.abspath(cfg.dir)): for filename in fnmatch.filter(files, cfg.glob): if cfg.print_parent_folder: pardir = os.path.normpath(os.path.join(path, '..')) pardir = os.path.split(pardir)[-1] print('[%s]' % pardir) filepath = os.path.join(path, filename) # backup original file if cfg.create_backup: backup_path = filepath + '.bak' while os.path.exists(backup_path): backup_path += '.bak' print('DBG: creating backup', backup_path) shutil.copyfile(filepath, backup_path) with open(filepath) as f: old_text = f.read() all_matches = search_pattern.findall(old_text) if all_matches: print('Found {} matches in file {}'.format(len(all_matches), filename)) new_text = search_pattern.sub(cfg.replace_regex, old_text) if not cfg.dry_run: with open(filepath, "w") as f: print('DBG: replacing in file', filepath) f.write(new_text) else: for idx, matches in enumerate(all_matches): print("Match #{}: {}".format(idx, matches)) print("NEW TEXT:\n{}".format(new_text)) elif cfg.verbose: print('File {} does not contain search regex "{}"'.format(filename, cfg.search_regex)) if __name__ == '__main__': parser = argparse.ArgumentParser(description='''DESCRIPTION: Find and replace recursively from the given folder using regular expressions''', formatter_class=argparse.RawDescriptionHelpFormatter, epilog='''USAGE: {0} -d [my_folder] -s <search_regex> -r <replace_regex> -g [glob_pattern] '''.format(os.path.basename(sys.argv[0]))) parser.add_argument('--dir', '-d', help='folder to search in; by default current folder', default='.') parser.add_argument('--search-regex', '-s', help='search regex', required=True) parser.add_argument('--replace-regex', '-r', help='replacement regex', required=True) parser.add_argument('--glob', '-g', help='glob pattern, i.e. *.html', default="*.*") parser.add_argument('--dry-run', '-dr', action='store_true', help="don't replace anything just show what is going to be done", default=False) parser.add_argument('--create-backup', '-b', action='store_true', help='Create backup files', default=False) parser.add_argument('--verbose', '-v', action='store_true', help="Show files which don't match the search regex", default=False) parser.add_argument('--print-parent-folder', '-p', action='store_true', help="Show the parent info for debug", default=False) config = parser.parse_args(sys.argv[1:]) find_replace(config)
Here
является обновленной версией скрипта, которая выделяет условия поиска и замены разными цветами.
SED - Найти и Заменить Строку в Файле
Самой полезной опцией в sed
— является опция поиска и замены.
В частности, она позволяет найти в текстовом файле определенные строки (содержащие определенные слова, шаблоны или попадающие под определенные регулярные выражения) и заменить каждую такую найденную строку какой-то другой строкой.
Чтобы заменить целую строку с помощью sed
, необходимо в начале и в конце шаблона, по которому мы ищем строки, добавить wildcards (.*
).
SED — Замена Строки
Используйте следующие опции команды sed
, чтобы найти каждую строку в файле, содержащую ШАБЛОН
и заменить каждую такую найденную строку, другой строкой — ЗАМЕНЯЮЩАЯ_СТРОКА
:
$ sed -i 's/.*ШАБЛОН.*/ЗАМЕНЯЮЩАЯ_СТРОКА/' ФАЙЛ
Опции переданные команде sed
:
Опция | Описание |
---|---|
-i | Перезаписать исходный файл |
s/ | Заменить каждую строку, содержащую
ШАБЛОН на ЗАМЕНЯЮЩАЯ_СТРОКА |
Как заменить текст в файле при помощи sed BASH
Покажу вам простой sh срипт для замены текста в файле. Ваша задача создать текстовой документ и расположить в нём маркеры, которые будут заменены на ваши слова. Нам поможет команда sed с ключом -i. Ключ -i означает замену строк в текстовом документе. Посмотрите на пример. Сначала мы объявляем переменные, потом происходит копирование файла. Далее происходит замена строк (маркеров). В конце выводим два файла. В оригинальном файле seg_test.txt наши не тронутые маркеры, а в файле seg_test2.txt результат замены строк. Вы можете заменить как одну строку, так и несколько строк. В нашем случае поиск строк осуществляется по всему документу.
#!/bin/bash file1='seg_test.txt' file2='seg_test2.txt' hostname1='yandex' hostname2='google' hostname3='rambler' hostname4='mail' cp ./$file1 ./$file2 sed -i "s/#1#/наша замена: $hostname1/" ./$file2 sed -i "s/#2#/наша замена: $hostname2/" ./$file2 sed -i "s/#3#/наша замена: $hostname3/" ./$file2 sed -i "s/#4#/наша замена: $hostname4/" ./$file2 echo "до замены $file1:" cat ./$file1 echo "" echo "" echo "после замены $file2:" cat ./$file2 echo "" #вывод: #до замены seg_test.txt: #1# #2# #3# #4# # #после замены seg_test2.txt: #наша замена: yandex #наша замена: google #наша замена: rambler #наша замена: mail
Очистка csv-файлов от символов ;
Допустим вы парсите файл csv и у вас уйма строк с непонятными символами ;;. Для очистки всего файла используйте условие "/;;/ d". Посмотрите на пример.
#удаление строк с символами ;; sed -i "/;;/ d" ./file.csv
Посмотрите на этот пример. Тут удаляются строки у которых количество символов ; больше одного. Если при экспорте эксельного файла в csv возникли пустые строки с символом ; , то срезайте их. Вся сложность в том, что количество символов ;..; в пустой строке может быть любым. Для этого случая используйте выражение '/^[;]\{1\}.*$/d'.
#пример файла csv column1;column2;column3;;;; Egor;Python;programmer;;;; Ivan;PHP;programmer;;;; ;;;; ;;;; ;;;; #удаление строк с символом ; #ищем ; sed -i "/^[;]\{1\}.*$/ d" ./file.csv #ищем символы не похожие на строки(a-z) и числа(0-9), #кириллические символы игнорируются sed -i "/^[^:alnum:]\{1\}.*$/ d" ./file.csv #тут учитываются кириллические символы sed -i "/^;*\t*.$/d" ./file.csv
Вы можете перед парсингом любого текстового документа очистить его от пустых строк. Для этого воспользуйтесь условием /^$/.
#удаление лишних символов sed -i "/^$/d" ./file.csv
просмотры: 6850, уровень: лёгкий уровень, рейтинг: 1, дата: 2017-10-25 15:46:07
Комментарии:
Как найти и заменить строку в нескольких файлах с помощью PHP
Переполнение стека- Около
- Продукты
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создайте своего сотрудника
Заменить определенную строку в большом файле (PHP)
Переполнение стека- Около
- Продукты
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
php - Удалить пустые строки из текстового файла
Переполнение стека- Около
- Продукты
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
Как заменить несколько элементов в текстовой строке в PHP?
Переполнение стека- Около
- Продукты
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя