Sed script

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

danslash
Сообщения: 9

Sed script

Сообщение danslash »

Великие Линуксойды, помогите разобраться с задачей...
Задание:
Узнайте то, что содержится в системном файле/etc/passwd на marian сервере.
Conatenate этот файл и переадресовывают вывод к текстовому файлу, названному myPasswd.txt. Используйте
следующая команда, чтобы узнать, что означают различные поля: man -s 4 passwd
Напишите скрипт sed (назовите это passwd.sed), который обрабатывает Ваш myPasswd.txt файл и
выводит следующие поля в отделенный текстовый файл запятой:
username, shell, home_directory
ppie," bash," /stud/ug/ppie

как правильно это сделать, весь инет перерыл, очень надо, помогите
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: Sed script

Сообщение /dev/random »

danslash писал(а):
06.12.2009 20:56
Узнайте то, что содержится в системном файле/etc/passwd на marian сервере.
Conatenate этот файл и переадресовывают вывод к текстовому файлу, названному myPasswd.txt. Используйте
следующая команда, чтобы узнать, что означают различные поля: man -s 4 passwd
Напишите скрипт sed (назовите это passwd.sed), который обрабатывает Ваш myPasswd.txt файл и
выводит следующие поля в отделенный текстовый файл запятой:
username, shell, home_directory
ppie," bash," /stud/ug/ppie

А теперь то же самое, только по-русски.
Спасибо сказали:
danslash
Сообщения: 9

Re: Sed script

Сообщение danslash »

Нужно взять файл из директории /etc/passwd занести все данные в myPasswd.txt написать скрипт SED названый passwd.sed который обрабатывает этот файл myPassqd.txt и выводит следующие поля в отделенный текстовый файл

Пример как должен выглядеть выходной файл
username, shell, home_directory
ppie," bash," /stud/ug/ppie

Assignment A2: “Who sed the password?”
Find out what is contained in the system file /etc/passwd on the marian server.
Conatenate this file and redirect the output to a textfile called myPasswd.txt. Use the
following command to find out what the different fields mean : man -s 4 passwd
Write a sed script (call it passwd.sed) which processes your myPasswd.txt file and
outputs the following fields into a comma separated text file:

username, shell, home_directory
ppie," bash," /stud/ug/ppie

вот оригинал...
Спасибо сказали:
danslash
Сообщения: 9

Re: Sed script

Сообщение danslash »

Может за оплату...? стучите в аську... 382481448
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Sed script

Сообщение SLEDopit »

danslash писал(а):
06.12.2009 21:19
Может за оплату...? стучите в аську... 382481448
гы. ну что сразу деньги, деньги. хотя если не жалко - я не откажусь =)

Код: Выделить всё

sed -rn 's/^([^:]*)(.*)[:](.*)[:](.*)/\1,\4,\3/p' /etc/passwd
зачем скрипт седовский в отдельный файл выносить - ума не приложу )

зы. пример отработки:

Код: Выделить всё

[06 Дек 2009 22:48:26] user@deb  ~
 $ sed -rn '1 s/^([^:]*)(.*)[:](.*)[:](.*)/\1,\4,\3/p' /etc/passwd
root,/bin/bash,/root
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
danslash
Сообщения: 9

Re: Sed script

Сообщение danslash »

SLEDopit
спасибо большое за отклик...
прочтите пожалуйста личное письмо...
Спасибо сказали:
danslash
Сообщения: 9

Re: Sed script

Сообщение danslash »

Или постучите в аську... Заранее благодарен
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Sed script

Сообщение drBatty »

SLEDopit писал(а):
06.12.2009 22:49
зачем скрипт седовский в отдельный файл выносить - ума не приложу )

потому-что даже ваш короткий однострок жутко непонятен.
впрочем, для одной команды это лишнее конечно.

Код: Выделить всё

$ sed -rn '1 s/^([^:]*)(.*)[:](.*)[:](.*)/\1,\4,\3/p' /etc/passwd

1) вторые скобки лишние.
2) квадратные скобки лишние.
а вообще - всё верно.
вот ещё вариант:

Код: Выделить всё

sed -r 's/:/\n/;s/:/\n/4g;s/\n[^\n]*\n/,/;s/\n/,/' /etc/passwd


ЗЫЖ тут полезен скрипт:

Код: Выделить всё

#!/bin/sed -rf
s/:/\n/
s/:/\n/4g
s/\n[^\n]*\n/,/
s/\n/,/
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Sed script

Сообщение drBatty »

Код: Выделить всё

s/:/,/5
s/:.*:/,/
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Sed script

Сообщение SLEDopit »

drBatty писал(а):
07.12.2009 01:52
1) вторые скобки лишние.
2) квадратные скобки лишние.
я что то не могу понять какие именно скобки. можно исправленный вариант?)
drBatty писал(а):
07.12.2009 02:27
s/:/,/5
s/:.*:/,/
ну тогда уж

Код: Выделить всё

sed -n -e "H; s/,//g; s/:/,/6; s/:.*:/,/; s/,.*,/,/; p; x; s/:/,/6; s/^.*:/,/; s/^,//; s/,.*//; s/^/,/;p" /etc/passwd
чтобы и на солярке работало =)
вот только как убрать перенос строки пока не додумался.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Sed script

Сообщение drBatty »

SLEDopit писал(а):
07.12.2009 04:37
я что то не могу понять какие именно скобки. можно исправленный вариант?)

Код: Выделить всё

sed -rn '1 s/^([^:]*).*:(.*):(.*)/\1,\3,\2/p' /etc/passwd

SLEDopit писал(а):
07.12.2009 04:37
ну тогда уж
Код
sed -n -e "H; s/,//g; s/:/,/6; s/:.*:/,/; s/,.*,/,/; p; x; s/:/,/6; s/^.*:/,/; s/^,//; s/,.*//; s/^/,/;p" /etc/passwd
чтобы и на солярке работало =)
вот только как убрать перенос строки пока не додумался.

ничего не понял :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Sed script

Сообщение SLEDopit »

drBatty писал(а):
07.12.2009 16:24
sed -rn '1 s/^([^:]*).*:(.*):(.*)/\1,\3,\2/p' /etc/passwd
спасибо.
drBatty писал(а):
07.12.2009 16:24
ничего не понял :)
ну я что-то перестарался. там половину выкинуть надо было )
я просто вот к чему:

Код: Выделить всё

[07 Дек 2009 16:58:42] user@deb  ~
 $ sed -n 's/:/,/5;s/:.*:/,/;1 p' /etc/passwd
root,/bin/bash
а у меня (после выкидывания лишнего)

Код: Выделить всё

[07 Дек 2009 16:59:30] user@deb  ~
 $ sed -n -e "H; s/,//g; s/:.*:/,/; 1p; x; s/:/,/6; s_^.*:/_/_; s/,.*//; 1p" /etc/passwd
root,/bin/bash
/root
в солярке нет расширенных регэксов, поэтому все что с -r работать не будет. а как в моем варианте надо было убрать перенос строки перед /root.
впрочем делается это не так сложно:

Код: Выделить всё

sed --posix -n -e "s/:/,/5; s/:.*,/,/; H; s/^.*,/,/; s/:.*//; H; x; s/,.*:/,/;s/\n//g; p; s/.*//g; h" /etc/passwd
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали: