2014-04-28 1 views
1

У меня есть целая куча файлов, которые все имеют блоки текста в них, которые выглядят так:Найти и заменить первую двойную цитату перед специальным символом через Grep

"Each file has different text between the opening double-quote 
and the closing right-quote (or whatever it's called)” 

Возможно, не имеет значения, но в прошлом Я использовал grep сделать поиск и замену, как это:

grep -Rl 'search' ./path/to/files/ | xargs sed -i 's/search/replace/g

есть ли способ сделать что-то подобное, но использовать регулярное выражение для замены оТКРЫТИЯ простой старой двойной кавычки с левой кавычкой ()? Единственный надежный способ заменить правильные символы двойной кавычки - это поиск по правильной кавычки, а затем назад к предыдущей двойной кавычки. Я думаю. Я просто не уверен, что это возможно или как это сделать.

Я мог бы просто сделать это с помощью PHP-скрипта, но тогда я не смог бы увидеть, возможно ли это из командной строки.

+0

Есть новой строки между 2 строки? – anubhava

+0

Нет, извините. Это было просто для предотвращения горизонтальной полосы прокрутки в SO. – bearfriend

+0

ok хорошо знать, поэтому вы просто хотите заменить '' 'на' ''? – anubhava

ответ

2

Вы можете использовать СЭД:

sed -i.bak 's/"\([^”]*”\)/“\1/' file 

cat file 
“Each file has different text between the opening double-quote and the closing right-quote (or whatever it's called)” 
+0

Отлично. Вот что я в итоге использовал: 'grep -Rl '" ./dir/ | xargs sed -i.bak 's/"\ ([^"] * "\) /" \ 1 /' 'Я не знал о' .bak'. Очень полезно. Я не лучший с регулярным выражением, но похоже, что это делает поиск целой строки, включая кавычки с обоих концов, а затем заменяет только первый символ. Правильно ли это? – bearfriend

+0

Да, он ищет обычную цитату '' 'то 0 или более символов, которые не являются' ", За которым следует' ''. – anubhava