Объединение 2 команд

Мне нужно написать скрипт оболочки для преобразования символов в файле в нижний регистр и замены не альфа-символов на _.

У меня есть отдельная команда для обоих выше. Как передать файл в качестве аргумента и сделать все вышеперечисленное, то есть выходные данные будут иметь только строчные буквы, а не альфа будет заменена на _ (подчеркивание)?

4
задан 25 June 2016 в 08:21

3 ответа

Подход Python к этому:

python -c 'import sys;print "\n".join(["".join([char.lower() if char.isalpha() else "_" for char in line]) for line in sys.stdin])' < input_file.txt

Основная идея здесь состоит в том, что мы разделяем каждую строку на отдельные символы и проверку, если тот символ является алфавитным, то восстановите строку и наконец присоединитесь ко всем строкам с новой строкой для создания нового файла

, Протестированного с/etc/passwd:

$ python -c 'import sys;print "\n".join(["".join([char.lower() if char.isalpha() else "_" for char in line]) for line in sys.stdin])' < /etc/passwd | head 

root_x_____root__root__bin_bash_
daemon_x_____daemon__usr_sbin__usr_sbin_nologin_
bin_x_____bin__bin__usr_sbin_nologin_
sys_x_____sys__dev__usr_sbin_nologin_
sync_x_________sync__bin__bin_sync_
games_x______games__usr_games__usr_sbin_nologin_
man_x______man__var_cache_man__usr_sbin_nologin_
lp_x_____lp__var_spool_lpd__usr_sbin_nologin_
mail_x_____mail__var_mail__usr_sbin_nologin_
news_x_____news__var_spool_news__usr_sbin_nologin_
0
ответ дан 25 June 2016 в 08:21
  • 1
    Мое родное разрешение не присутствует в списке videoinfo, и это не работает, когда установлено в GRUB_GFXMODE. Когда я установил nomodeset, все другое разрешение больше не доступно в параметрах настройки системы. Я закончил тем, что включил более низкое разрешение для GRUB_GFXMODE, разрешение автоматически корректируется к собственному и набору GRUB_GFXPAYLOAD =" keep" – g_t_sync 12 November 2017 в 09:08

Другой ответ решает Вашу непосредственную проблему, но решение для общего случая "объединения двух команд" остается быть упомянутым. Хотите верьте, хотите нет, экосистема Unix была разработана с этим в памяти, и Ваша оболочка определенно даст Вам способ сделать это.

, Если Вы хотите подать файл через "конвейер" команд, Вы используете | (канал) символ в ударе (по-видимому, оболочка, которую Вы используете).

Некоторые другие полезные инструменты стоит упомянуть здесь также: утилита "кошки", и">" оператор перенаправления.

Позволяют нам предположить, что Ваш файл называют input.txt, и Вы хотите выполнить его через свой конвейер и назвать результат output.txt.

Позволяют нам создать нашу часть команды частью:

$ cat input.txt

Вот то, что "кошка" я говорил о. Во всех отношениях, это просто производит содержание Вашего файла. Теперь, давайте добавим первую команду в нашем конвейере: "удаляют неалфавит" часть. Я выну часть из команды sed heemayl, чтобы сделать это:

$ cat input.txt | sed 's/[^[:alpha:]]/_/g'

Изучение sed и регулярные выражения являются целым 'nother зверь, поэтому позвольте нам просто быть довольными, что эта команда делает то, что мы хотим на данный момент. Прибавление по следующей части:

$ cat input.txt | sed 's/[^[:alpha:]]/_/g' | tr 'A-Z' 'a-z'

я проявил другой подход, чем heemayl для этого, но он делает то же задание. Наконец, давайте поместим вывод в место назначения, которое мы хотим:

$ cat input.txt | sed 's/[^[:alpha:]]/_/g' | tr 'A-Z' 'a-z' > output.txt

Там мы идем, мы сделали это. Можно представить в виде строки столько команд вместе, сколько Вы хотите с | оператор, затем помещаете вывод в использование файла>. Это - очень общая задача в среде командной строки, таким образом, хорошо знать то, что продолжается, и привыкните к использованию ее. ;)

0
ответ дан 25 June 2016 в 08:21
  • 1
    Да разрешения перечислены ' videoinfo' единственные, поддерживаемые личинкой на данном наборе аппаратных средств. – J. Starnes 12 November 2017 в 09:12

Используя sed:

sed 's/[^[:alpha:]]/_/g; s/[[:upper:]]/\L&/g' file.txt

Это равняется на самом деле двум sed команды, разделенные ;:

  • s/[^[:alpha:]]/_/g преобразовывает каждый небуквенный символ в _

  • s/[[:upper:]]/\L&/g, преобразовывает все символы верхнего регистра в нижние регистры

Пример:

$ cat file.txt 
fooBAr132323
SpamEgg

$ sed 's/[^[:alpha:]]/_/g; s/[[:upper:]]/\L&/g' file.txt
foobar______
spamegg
0
ответ дан 25 June 2016 в 08:21

Другие вопросы по тегам:

Похожие вопросы: