Регулярное выражение для замены закрывающей кавычки в подстроках
В каталоге текстовые файлы содержат вызов функции. Первый параметр - имя файла без расширения:
any_function( 'name_file', .... );
Задача: к значению первого параметра добавить расширение файла. Например:
any_function( 'name_file.php', .... );
Я пользуюсь bash и с простыми заменами справляюсь так:
find /dir -type f -print0 | xargs -0 sed -i 's/что_менять/на_что_менять/g' ;
Или использую программу regexxer. Могу в php прогнать файлы. Но не могу составить регулярное выражение для замены закрывающей кавычки "'" на ".php'" для вызовов этой функции. Прошу помочь!
Ответы (2 шт):
В sed используется особенная реализация регулярных выражений стандарта POSIX BRE/ERE (например, см. Регулярные выражения).
В вашем случае можно воспользоваться следующим выражением стандарта POSIX BRE:
sed "s/any_function( *'[^']*/&.php/"
См. пример в Bash:
#!/bin/bash
s="any_function( 'name_file', .... );"
sed "s/any_function( *'[^']*/&.php/" <<< "$s"
# => any_function( 'name_file.php', .... );
Подробности
any_function(- текстany_function((в POSIX BRE(является обчным символом)*- ноль и более пробелов'- одинарная кавычка[^']*- ноль и более символов, отличных от одинарной кавычки.
& указывает на текст целого совпадения.
Попробуйте awk:
cat file
any_function( 'name_file1', '142', 'ssa' );
any_function( 'name_file2', '1ww', 'jsa' );
any_function( 'name_file3', 'faf', 'spa' );
$ awk -F\' 'BEGIN {OFS=FS} {$2=$2".php"; print}' file
any_function( 'name_file1.php', '142', 'ssa' );
any_function( 'name_file2.php', '1ww', 'jsa' );
any_function( 'name_file3.php', 'faf', 'spa' );