Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как заменить строку в файле 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

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создайте своего сотрудника
.

Заменить определенную строку в большом файле (PHP)

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

php - Удалить пустые строки из текстового файла

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Как заменить несколько элементов в текстовой строке в PHP?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

Смотрите также