Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Bash: Разбиение строк по шаблону  (Прочитано 8682 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн stlmn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
  • wtf?!
    • Просмотр профиля
Bash: Разбиение строк по шаблону
« : 23 Декабря 2012, 14:12:07 »
Добрый день, подскажите как разбить строку по шаблону?
К примеру файл /etc/passwd - его шаблон
Цитировать
username:pswd:uid:gid:uid comments:directory:shell
надо что бы при выводе $username выдавало только имена пользователей и их $directory
« Последнее редактирование: 23 Декабря 2012, 14:19:31 от stlmn »

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
Re: Bash: Разбиение строк по шаблону
« Ответ #1 : 23 Декабря 2012, 14:15:15 »
stlmn,
bash-скрипт — обёртка, которая вызывает всякие другие программы. В данном случае понадобится sed.

Оффлайн stlmn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
  • wtf?!
    • Просмотр профиля
Re: Bash: Разбиение строк по шаблону
« Ответ #2 : 23 Декабря 2012, 14:22:22 »
stlmn,
bash-скрипт — обёртка, которая вызывает всякие другие программы. В данном случае понадобится sed.

Пробовал через cut.. на выходе все время было
Цитировать
read: 9: arrgs

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Bash: Разбиение строк по шаблону
« Ответ #3 : 23 Декабря 2012, 14:31:49 »
Обязательно bash? Питон не пойдет?
И подробнее опишите, что значит вывод $username? По нему определить директорию? Или вывести список юзернаме - директория?
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн stlmn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
  • wtf?!
    • Просмотр профиля
Re: Bash: Разбиение строк по шаблону
« Ответ #4 : 23 Декабря 2012, 14:41:58 »
Обязательно bash? Питон не пойдет?
И подробнее опишите, что значит вывод $username? По нему определить директорию? Или вывести список юзернаме - директория?

язык bash
при выводе $username должно отобразить все имена пользователей, которые хранятся в файле /etc/passwd а также их домашние каталоги ($directory)

Пользователь решил продолжить мысль 23 Декабря 2012, 14:51:35:
насколько я понимаю, то суть задачи такова: проходим каждую строку в файле, записываем в переменную символы, пока не встречаем тот самый разделить (из шаблона) ":".. и так для каждой переменной
более менее представляю как это на С++ сделать, а вот на bash словил тупик..
« Последнее редактирование: 23 Декабря 2012, 14:51:35 от stlmn »

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Bash: Разбиение строк по шаблону
« Ответ #5 : 23 Декабря 2012, 15:27:35 »
echo "username:pswd:uid:gid:uid comments:directory:shell" | sed 's/:/ /g' | awk '{print $1}'echo "username:pswd:uid:gid:uid comments:directory:shell" | sed 's/:/ /g' | awk '{print $(NF-1)}'
Wars ~.o

Оффлайн absent

  • Активист
  • *
  • Сообщений: 368
  • Ubuntu 16.04
    • Просмотр профиля
Re: Bash: Разбиение строк по шаблону
« Ответ #6 : 23 Декабря 2012, 15:33:31 »
cat /etc/passwd | cut -d: -f1,6awk -F: '{print $1,$6}' /etc/passwd

Оффлайн stlmn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
  • wtf?!
    • Просмотр профиля
Re: Bash: Разбиение строк по шаблону
« Ответ #7 : 23 Декабря 2012, 15:49:56 »
Спасибо всем, разобрался и сделал так:

file="/etc/passwd"
#username:pswd:uid:gid:uid comments:directory:shell
while read line ; do
IFS=":"
set -- $line
username=$1
pswd=$2
uid=$3
gid=$4
uid_comments=$5
directory=$6
shell=$7
echo username: "$username\t"
echo directory: "$directory\n"
done < $file

Пользователь решил продолжить мысль 23 Декабря 2012, 15:51:48:
да, сделал по глупому, но как получилось :)
« Последнее редактирование: 23 Декабря 2012, 15:51:48 от stlmn »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Bash: Разбиение строк по шаблону
« Ответ #8 : 23 Декабря 2012, 16:00:48 »
Код: (bash) [Выделить]
while IFS=":" read LOGIN_NAME LOGIN_PASSWD LOGIN_UID LOGIN_GID LOGIN_DESC LOGIN_HOME LOGIN_SHELL ; do echo $LOGIN_NAME ; done < /etc/passwd

Оффлайн stlmn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
  • wtf?!
    • Просмотр профиля
Re: Bash: Разбиение строк по шаблону
« Ответ #9 : 23 Декабря 2012, 16:05:18 »
и еще вопрос, как вывести, цитирую
Цитировать
оболочки тех пользователей, которые не являются владельцами своих домашних каталогов
?

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1293
    • Просмотр профиля
Re: Bash: Разбиение строк по шаблону
« Ответ #10 : 24 Декабря 2012, 17:02:18 »
Например, так:
[ `ls -ld $LOGIN_HOME | awk '{print $3}'` != "$LOGIN_NAME" ] && echo $LOGIN_SHELL

ps Неужели даже условие непонятно?

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Bash: Разбиение строк по шаблону
« Ответ #11 : 24 Декабря 2012, 17:09:07 »
как вывести оболочки тех пользователей, которые не являются владельцами своих домашних каталогов
Подсказка
man find
Вопрос: зачем оно надо?

Оффлайн stlmn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
  • wtf?!
    • Просмотр профиля
Re: Bash: Разбиение строк по шаблону
« Ответ #12 : 24 Декабря 2012, 21:21:52 »
Vitsliputsli,
условие понятно.. не понятна была реализация..
Спасибо большое

arcfi,
в универе и не такое могут придумать..

 

Страница сгенерирована за 0.051 секунд. Запросов: 25.