Страница 1 из 2

викторина по shell

Добавлено: 2007-11-26 17:50:10
catdog_
предлагаю поиграться, заодно может узнать чего нового : )
типа я начну. один дает задачку, другие решают. например, проверить существует ли файл /etc/motd
решение мб таким

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

[ -f /etc/motd ]; echo $?
если 0 значит существует, 1 - нет
кто дает ответ, задает свое задание и т.д.
кто согласен?

1 задание: выдрать из текущего пути имя каталога : ) (из /usr/port/distfiles чтобы осталось distfiles)

Re: викторина по shell

Добавлено: 2007-11-26 19:27:46
Alex Keda

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

man basename
вопрос - выдернуть путь из того же имени, без имени файла

Re: викторина по shell

Добавлено: 2007-11-26 19:38:53
catdog_
жесть но пашет %)

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

expr $PWD : '\(.*\)/'
строку из нижнего в верхний регистр?

Re: викторина по shell

Добавлено: 2007-11-26 19:45:33
Alex Keda
catdog_ писал(а):жесть но пашет %)

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

expr $PWD : '\(.*\)/'
строку из нижнего в верхний регистр?
интересный ответ, но есть иное решение

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

dirname /parh/to/file
/parh/to
========

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

ussr# echo STROKA | tr "[:upper:]" "[:lower:]"
stroka
ussr#
==============
вопрос - есть файл:

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

ussr# more file.txt
stroka 1
stroka 2
stroka 3
stroka 4
sktroka 5
stroka 6
stroka7

ussr# одна команда без конвейеров - выбрал две строки выше 4 и одну ниже + сама 4-я
stroka 2
stroka 3
stroka 4
sktroka 5
ussr#    
огласите команду

Re: викторина по shell

Добавлено: 2007-11-26 19:58:45
kmb

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

awk "(NR>1 && NR<6)" test.txt
как вывести размер файлов, папок в текущей директории?

Re: викторина по shell

Добавлено: 2007-11-26 20:05:51
catdog_
задание вывести числа от 1 до 33 в 3 колонки

Re: викторина по shell

Добавлено: 2007-11-26 20:05:58
Alex Keda

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

ussr# grep --after-context=1 --before-context=2 "stroka 4" file.txt
stroka 2
stroka 3
stroka 4
sktroka 5
ussr#       
кругом извращенцы...
вы не ответили - лишь подогнали под ситуацию. условие было иное.
===========
du
=========
как изменить дату последнего доступа к файлу?

Re: викторина по shell

Добавлено: 2007-11-26 20:09:52
kmb
Задачу нужно правильно формулировать :P =)))
Тем более, мы же не знаем, что на строке 4 будет :)
Кстати, не du -sm, не du не показывают чего я просил :) первая выводит одно число, вторая выводи вместе с под папками, я же просил что-нибудь типа таблички наподобие df -m =)

Re: викторина по shell

Добавлено: 2007-11-26 20:11:33
catdog_
лис, можно же по разному ; ) я бы твою решил так (по извращенски)

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

sed -n '2,5p' file.txt
нада была в задании указать что файло может быть большииим заранее не известно на какой строке стоит нужная: )

Re: викторина по shell

Добавлено: 2007-11-26 20:11:44
Alex Keda
тогда :))

Re: викторина по shell

Добавлено: 2007-11-26 20:13:00
Alex Keda
lissyara писал(а):

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

ussr# одна команда без конвейеров - выбрал две строки выше 4 и одну ниже + сама 4-я
помоему - условие чётче некуда..
и твое решение - тоже не катит.

Re: викторина по shell

Добавлено: 2007-11-26 20:47:00
catdog_
как изменить дату последнего доступа к файлу?
touch -t 11262000 file.txt ?

Re: викторина по shell

Добавлено: 2007-11-28 18:01:48
schizoid
а задание?

Re: викторина по shell

Добавлено: 2007-11-28 21:51:37
catdog_
я ж писал выше расположить числа от 1 до 33 в 3 колонки: )
вот так
1 2 3
4 5 6
........
или
1 12 ...
2 13
3 14
...

Re: викторина по shell

Добавлено: 2007-11-29 4:18:10
Гость

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

> jot 33 | rs 0 3
1   2   3
4   5   6
7   8   9
10  11  12
13  14  15
16  17  18
19  20  21
22  23  24
25  26  27
28  29  30
31  32  33
> jot 33 | rs -t 0 2
1   18
2   19
3   20
4   21
5   22
6   23
7   24
8   25
9   26
10  27
11  28
12  29
13  30
14  31
15  32
16  33
17  
Или нужно именно с 12-ки?

А пока я дам свою задачу:
есть файл rand.txt:

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

rmajjfia
uhfgkljv
skfuycar
gsalaoxy
lypcjesi
rnusfdnn
colaqtkd
xkprutze
gytxmkwv
krtuzrjd
rymtoatl
aotolxid
flcunoqv
shummdhn
uvotcnep
xstkwwls
edtrpqdl
aytnuaxe
tmepzwnh
galhuxgj
Нужно удалить диапазон от lypcjesi до uvotcnep включительно одной командой, не меняя имени файла. Чтоб такую команду можно было скормить find /path/to/smth -type f -exec <команда> {} +

Re: викторина по shell

Добавлено: 2007-11-29 4:42:26
catdog_

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

sed '/^lyp/,/^uvo/d' rand.txt
не пойдет?

Re: викторина по shell

Добавлено: 2007-11-29 4:57:15
Гость
кое-чего не хватает, т.к. надо удалить в файле, а не считать и вывести отредактированный в stdout
а так, да, сойдет.

Re: викторина по shell

Добавлено: 2007-11-29 17:03:34
catdog_
ну раз сойдет, тогда как подсчитать количество строк в фале без wc?

Re: викторина по shell

Добавлено: 2007-11-29 17:30:48
Гость
но мне все равно интересно отгадаешь ли ты правильный вариант, телепатией владеешь? :)
ответ на твой вопрос: sed -n '$='

Re: викторина по shell

Добавлено: 2007-11-29 17:35:04
Гость
вопрос: Как дождаться завершения выполнения определенного задания в асинхронном режиме (что-то типа cmd &)?

Re: викторина по shell

Добавлено: 2007-12-02 13:12:44
RusBiT
Задание
Есть файл вида ip - mac
Для примера :)

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

(10.0.6.5) at 00:02:a5:fe:d9:fd
(10.0.6.6) at 00:13:02:4b:a4:04
(10.0.6.7) at 00:04:76:0e:9b:0a
(10.0.6.8) at 00:04:79:67:8e:ec
(10.0.6.23) at 00:04:61:43:ad:88
(10.0.6.28) at 00:0e:a6:95:07:3e
(10.0.6.36) at 00:04:79:67:8e:ec
(10.0.6.39) at 00:0d:87:cf:13:be
(10.0.6.42) a 00:04:79:67:8e:ec
(10.0.6.66) at 00:13:8f:ab:bc:c7
(10.0.6.72) at 00:0e:a6:95:07:3e
(10.0.6.75) at 00:04:79:67:8e:ec
(10.0.6.76) at 00:80:48:38:e8:4f
(10.0.6.81) at 00:0f:ea:33:f8:df
(10.0.6.100) at 00:80:48:19:63:f5
(10.0.6.103) at 00:0e:a6:95:07:3e
Нужно определить какой mac занимал какие ip

Re: викторина по shell

Добавлено: 2007-12-02 13:14:45
dikens3
cat file | grep "00:00:00:00:00:00" | awk '{print $1}'

Re: викторина по shell

Добавлено: 2007-12-02 17:23:17
RusBiT
dikens3 писал(а):cat file | grep "00:00:00:00:00:00" | awk '{print $1}'
Имел ввиду чтоб автоматически определялся :) по маку, есть подмена или нет

Re: викторина по shell

Добавлено: 2007-12-02 20:00:24
Гость

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

> sh test.sh test.data
00:04:79:67:8e:ec in test.data contains:
10.0.6.8
10.0.6.36
10.0.6.42
10.0.6.75
00:0e:a6:95:07:3e in test.data contains:
10.0.6.28
10.0.6.72
10.0.6.103
> cat test.sh
for file; {
    for mac_addr in $(sed 's/([.[:digit:]]*)[[:space:]]*at[[:space:]]*\([:[:alnum:]]*\)/\1/' "$file" | sort -d | uniq -d); {
        echo $mac_addr in $file contains:
        sed -n "/$mac_addr/{ s/.*(\([.[:digit:]]*\)).*/\1/; p; }" $file
    }
}
Так? Подозреваю, что можно обойтись чистым awk, где счетчик будет в основном скрипте, а вывод в END части.

Re: викторина по shell

Добавлено: 2007-12-03 3:46:15
catdog_
Гость, на предыдущий то свой вопрос ответь, а то никто видима не знает: )