2013-05-21 2 views
2

Я хотел бы заменить все содержимое файла, которое соответствует заданному регулярному выражению, их нижнему регистру. Как:Найти по регулярному выражению и заменить совпадение в нижнем регистре в Bash

grep -o '[^ ]*[A-Z][^ ]*.png' file-21-05-2013.sql* | awk '{print tolower($0)}' 

Линия выше находит все строки в данном файле, которые имеют по крайней мере один символ верхнего регистра и печатает строчной эквивалент.

Я хотел бы заменить вывод команды Grep с выводом всей команды над

Имеет ли это смысл?

+0

Его не кучу файлов. Его содержимое в файле, который мне нужно заменить. – Yannis

+1

Нам было бы намного легче помочь вам, если бы вы предоставили образец данных. – choroba

+0

Кажется, проще просто выполнить 'tr A-Z a-z', который, я считаю, обеспечивает то, что вы хотите, когда говорите« вывод всей команды ». –

ответ

2

Если вы используете систему GNU, то GNU СЭД имеет следующее расширение:

\L 
Turn the replacement to lowercase until a \U or \E is found, 

Следующая команда должна делать то, что вам нужно:

sed "s/\([^ ]*[A-Z][^ ]*.png\)/\L\1/g" file-21-05-2013.sql* 
+1

И если вы добавите -i в качестве опции, он будет делать изменения непосредственно в вашем файле, а не печатать их на stdout. –

+0

Закрыть. Но не совсем. Посмотрите этот вывод: 'Yannis-MacBook: загрузка yannis $ cat output-21-05-2013.sql Yannis-MacBook: Загрузки yannis $ sed" s/\ ([^] * [AZ] [^ ] * .png \)/\ L \ 1/g "output-21-05-2013.sql ' – Yannis

+1

Учитывая ваше имя хоста, у вас, вероятно, нет GNU sed: - / –

1
sed -nr '/^.*\b(\w*[A-Z]\w*\.png).*$/{s//\1/;s/.*/\L\0/;p}' file 
Смежные вопросы