Intereting Posts
Как запустить программу при загрузке с определенным пользователем после запуска нескольких других служб? Почему мой rsync не разрешает размер блока> 128 КБ? Определение функции оболочки: почему есть место после открытия скобки? Как подготовить Windows NTFS диски в Linux Самый быстрый способ переименования файлов без переименования пути каталога Как извлечь положительные числа в первом столбце из вывода, как в вопросе? Не удается записать на внутренний раздел HDD NTFS в Parrot OS Email Отправлено через root@domain.com, несмотря на изменение / etc / aliases vmware debian sid gnome mouse не работает клавиатура в порядке Хранить секретный ключ для удаленного архива пакетов reprepro локально Какое ядро ​​Linux поддерживает порт дисплея Thunderbolt в ноутбуке для ПК? Устаревшие версии Debian и Bash Shellshock Клавиатура функциональных клавиш Bind Shell script: перенаправить вывод sql-запроса в файл Будет ли перенос репозитория SVN репозитория из Linux в ОС Windows вызовет проблемы с EOL?

Преобразование содержимого файла в нижний регистр

У меня есть файл temp с содержимым в нижнем и верхнем регистре.

вход

Содержание моего temp файла:

 hi Jigar GANDHI jiga 

Я хочу преобразовать все верхние в нижние .

команда

Я попробовал следующую команду:

 sed -e "s/[AZ]/[az]/g" temp 

но получил неправильный результат.

Вывод

Я хочу это как:

 hi jigar gandhi jiga 

Что должно быть в заменяющей части аргумента для sed ?

Если ваш ввод содержит только символы ASCII, вы можете использовать tr как:

 tr AZ az < input 

или (менее легко запомнить и ввести IMO, но не ограничиваясь латинскими буквами ASCII):

 tr '[:upper:]' '[:lower:]' < input 

если вам нужно использовать sed :

 sed 's/.*/\L\1/g' < input 

(здесь предполагается реализация GNU).

Используя vim, это супер просто:

 $ vim filename gg0guGZZ 

Открывает файл, gg идет в первую строку, 0 , первый столбец. С помощью guG уменьшает регистр всех символов до нижней части файла. ZZ сохраняет и завершает работу.

Он должен обрабатывать все, что вы бросаете на него; он будет игнорировать числа, он будет обрабатывать не ASCII.

Если вы хотите сделать наоборот, поверните нижние очерченные буквы в верхний регистр, gg0gUGZZ u для U : gg0gUGZZ и вы настроены.

Мне нравится dd для этого, я сам.

 <<\IN LC_ALL=C 2>/dev/null \ dd conv=lcase hi Jigar GANDHI jiga IN 

… получает …

 hi jigar ghandi jiga 

LC_ALL=C предназначен для защиты любых мультибайтов во вводе – хотя любые многобайтовые капиталы не будут преобразованы. То же самое верно для (GNU) tr – оба приложения склонны к вводу mangling в любом не-C-регионе. iconv можно комбинировать либо для комплексного решения.

Переадресация 2>/dev/null отбрасывает отчет о статусе dd умолчанию – и его stderr. Без него dd будет следовать завершению работы, как указано выше, с информацией о печати, например, сколько байтов было обработано и т. Д.

Вы также можете использовать Perl 5:

 perl -pe '$_=lc' temp 

Опция -p сообщает perl запускать указанное выражение один раз для каждой строки ввода, печатая результат, то есть конечное значение $_ . -e указывает, что программа будет следующим аргументом, а не файлом, содержащим скрипт. lc преобразуется в нижний регистр. Без аргумента он будет работать на $_ . И $_= снова сохраняет это значение, поэтому оно будет напечатано.

Вариант этого будет

 perl -ne 'print lc' temp 

Использование -n похоже на -p за исключением того, что $_ не будет напечатано в конце. Поэтому вместо сохранения этой переменной я включаю явный оператор печати.

Одним из преимуществ Perl в отличие от sed является то, что вам не нужны расширения GNU. Существуют проекты, которые должны быть совместимы с не-GNU-средами, но которые также имеют зависимость от Perl. По сравнению с tr , возможно, что Perl lc можно более легко сделать локальным. Подробные perllocale см. На perllocale man perllocale .

Вам нужно захватить согласованный шаблон, а затем использовать его в замене с помощью модификатора:

 sed 's/\([AZ]\)/\L\1/g' temp 

\(...\) "захватывает" прилагаемый согласованный текст, первый захват идет в \1 , рядом с \2 и т. Д. Нумерация выполняется в соответствии с открытыми скобками в случае вложенных захватов.

\L преобразует захваченный шаблон в нижний регистр, там также \U для верхнего регистра.