BASH Scripting

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

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

op@n
Сообщения: 2

Re: BASH Scripting

Сообщение op@n »

Всем спасибо!
Когда писал нужно было срочно, а в башке тупняк какой-то. На opennet мне еще несколько вариантов подбросили

sed -n "$i"p
awk 'FNR=='"$i"
head -$i | tail -1
sed -n "$i"'{p;q}'
tail -n +$i|head -1
awk -v i="$i" 'FNR==i'
awk 'FNR=='"$i"'{print;exit}'
j=$i; while((j-->0)); do read str; done <$FILE ; echo $str
cat -n TEST_FILE | grep "^$i"
nl -s ' ' -w 1 TEST_FILE | grep "^$i"

Сейчас читаю и думаю - блин это ж так просто.
:)
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: BASH Scripting

Сообщение ZyX »

drBatty писал(а):
04.07.2009 21:12
В данном случае нужно сначала проверить, является ли $i числом, например подходит ли оно под шаблон /[[:digit:]]+/, и если подходит - то можно выполнять.
Я тоже хотел предложить изменить команду на «

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

[[ "$i" =~ "^[[:digit:]]+$" ]] && sed -n "${i}p"
», но решил не
занудствовать. Замечу только, что если писать на bash’е (вообще-то, этот код для
zsh. На bash по непонятным причинам он будет работать только если окружить
шаблон одинарными штрихами, а перед «$» поставить обратную косую черту.) и не
указать в шаблоне якоря начала и конца строки, то под шаблон попадёт любое
выражение, содержащее хоть одну цифру. На sh аналогичный код выглядит так:

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

expr match "$i" '^[[:digit:]]\+$' &>/dev/null && sed -n "${i}p"
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: BASH Scripting

Сообщение drBatty »

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

echo $i | sed -rn 's/^[[:digit:]]+$/sed -n \x27&p\x27 file.txt/ep'
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Strange_V
Сообщения: 69
ОС: Ubuntu last version

Re: BASH Scripting

Сообщение Strange_V »

Возможно банальный вопрос, но:

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

(for ((i=0;i<100;i+=4)); do echo $i; sleep 1; done) | zenity --progress --auto-close --text="iteration: $i"

Само собой $i не выводится, а как правильно?
В идеале нужно не только $i, но и другие переменные из цикла.
www.notes.if.ua | Клуб «Velo–Stalker»
Жизнь - это шахматная партия, по окончании которой и короли, и пешки ложатся в один ящик.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: BASH Scripting

Сообщение watashiwa_daredeska »

Strange_V писал(а):
18.07.2009 00:17
Само собой $i не выводится, а как правильно?
В идеале нужно не только $i, но и другие переменные из цикла.
Внести внутрь цикла?

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

for ((i=0;i<100;i+=4)); do echo $i | zenity --progress --auto-close --text="iteration: $i"; sleep 1; done
Спасибо сказали:
Аватара пользователя
Strange_V
Сообщения: 69
ОС: Ubuntu last version

Re: BASH Scripting

Сообщение Strange_V »

watashiwa_darede...
Нет, тогда не работает, окно zenity почти не показывается (моргает)
www.notes.if.ua | Клуб «Velo–Stalker»
Жизнь - это шахматная партия, по окончании которой и короли, и пешки ложатся в один ящик.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: BASH Scripting

Сообщение watashiwa_daredeska »

Strange_V писал(а):
18.07.2009 01:10
Нет, тогда не работает, окно zenity почти не показывается (моргает)
А что Вы вообще хотите сделать? Насколько я понял из man zenity, он не позволяет менять текст progress dialog на ходу.
Спасибо сказали:
Аватара пользователя
Strange_V
Сообщения: 69
ОС: Ubuntu last version

Re: BASH Scripting

Сообщение Strange_V »

watashiwa_daredeska
Именно изменить текст (добавить: Обработка, файл 10 из 78 ) и хотел. Но наверное Вы правы, так не получится.
Спасибо.
www.notes.if.ua | Клуб «Velo–Stalker»
Жизнь - это шахматная партия, по окончании которой и короли, и пешки ложатся в один ящик.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: BASH Scripting

Сообщение drBatty »

Strange_V писал(а):
18.07.2009 00:17
Возможно банальный вопрос, но:

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

(for ((i=0;i<100;i+=4)); do echo $i; sleep 1; done) | zenity --progress --auto-close --text="iteration: $i"

а почему нельзя писать скрипт?
обязательно однострок?
ИМХО даже sed я сворачиваю в файл (#!/bin/sed и далее)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Strange_V
Сообщения: 69
ОС: Ubuntu last version

Re: BASH Scripting

Сообщение Strange_V »

drBatty писал(а):
18.07.2009 19:42
а почему нельзя писать скрипт?
обязательно однострок?
ИМХО даже sed я сворачиваю в файл (#!/bin/sed и далее)

Нет разницы как, если будет достигнут результат.
Гм, а можно маленький пример? ибо не особо уловил что даст разделение в этой проблеме.
www.notes.if.ua | Клуб «Velo–Stalker»
Жизнь - это шахматная партия, по окончании которой и короли, и пешки ложатся в один ящик.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: BASH Scripting

Сообщение drBatty »

Strange_V писал(а):
18.07.2009 22:25
Нет разницы как, если будет достигнут результат.

у меня нет zenity, и я не знаю что это такое. (да и знать не хочу).
Strange_V писал(а):
18.07.2009 22:25
Гм, а можно маленький пример? ибо не особо уловил что даст разделение в этой проблеме.

примеры выше были.
для вас это даст понимание проблемы...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: BASH Scripting

Сообщение pcodr »

Strange_V
Воспользуйтесь чем нибудь более гибким чем zenity.
Такое можно достаточно легко реализовать на скриптовом языке (Perl, PHP, Python, Ruby, ... ) и библиотеке GTK2 к нему.

Вот я набросал на perl примерно то, что вам нужно:

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

#!/usr/bin/perl

use Gtk2 -init;
use utf8;

$i = 0;

$label = Gtk2::Label->new('iteration: ');
$pbar  = Gtk2::ProgressBar->new;

$hbox = Gtk2::HBox->new;
$hbox->pack_start($label, 0, 0, 0);

$vbox = Gtk2::VBox->new;
$vbox->set_border_width(10);
$vbox->pack_start($hbox, 0, 0, 0);
$vbox->pack_start($pbar, 0, 0, 0);

$hbbox = Gtk2::HButtonBox->new;
$b_cancel = Gtk2::Button->new_from_stock('gtk-cancel');
$b_cancel->signal_connect(clicked => sub{ Gtk2->main_quit });
$b_ok  = Gtk2::Button->new_from_stock('gtk-ok');
$b_ok->set_sensitive(0);
$hbbox->pack_start($b_cancel, 0, 0, 0);
$hbbox->pack_start($b_ok, 0, 0, 0);

$win = Gtk2::Dialog->new('Ход процесса', undef, 'modal');
$win->set_icon_name('gtk-execute');
$win->set_size_request(280, 120);
$win->vbox->add($vbox);
$win->action_area->add($hbbox);
$win->signal_connect(delete_event => sub{ Gtk2->main_quit });
$win->signal_connect(realize      => sub{ iterate(); Glib::Timeout->add(1000, \&iterate) });
$win->show_all;

Gtk2->main;

sub iterate
{
    $i += 0.04;
    $label->set_text("iteration: ".($i*100)."/100");
    exit if $i eq 1;
    $pbar->set_fraction($i);
    return 1;
}


У вас нет необходимых прав для просмотра вложений в этом сообщении.
remote system type is unix
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: BASH Scripting

Сообщение KDimanB »

Люди, помогите пожалуйста написать простой bash-скрипт.

Есть каталог, в котором лежат файлы. Я хочу создать скрипт, который формировал бы web-страницу с гипер-ссылками на те файлы. Примерно где-то так:

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

#!/bin/sh
filename=/var/www/files.html

ls /var/www/files/ > /var/www/files-list.txt

echo "<HTML><BODY>" > $filename

for STRING in /var/www/files-list.txt do
    echo "<a href=/var/www/" >> $filename
    echo $STRING >> $filename
    echo ">" >> $filename
    echo $STRING >> $filename
    echo "</a>" >> $filename
    done

echo "</BODY></HTML>" >> $filename

Только я никогда не писал bash-скрипты и он не работает :(
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4458
Статус: GNU generation
ОС: Debian GNU/Linux

Re: BASH Scripting

Сообщение Rootlexx »

Diman

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

#!/bin/bash

OUTPUT_FILENAME="/var/www/files.html";
FILES_DIR="/var/www/files";

printf "<HTML><BODY>\n" > "$OUTPUT_FILENAME";
for element in "$FILES_DIR"/*; do
    printf "<a href=\"%s\">%s</a>\n" "$element" "$element" >> "$OUTPUT_FILENAME";
done
printf "</BODY></HTML>\n" >> "$OUTPUT_FILENAME";
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: BASH Scripting

Сообщение KDimanB »

Спасибо :)
Всё работает, только косяк один. Он полное имя файла берёт и потом его не находит на сервере, ибо ссылка выглядит так:
http://localhost/var/www/files/file.png
вместо:
http://localhost/files/file.png

Т.е. в переменную element можно как-то неполное имя файла засунуть? Или при записи в файл убрать "/var/www/"?
Спасибо сказали:
Аватара пользователя
Cra3y
Сообщения: 80
ОС: Debian

Re: BASH Scripting

Сообщение Cra3y »

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

#!/bin/bash

OUTPUT_FILENAME="/var/www/files.html";
FILES_DIR="/var/www/files";

printf "<HTML><BODY>\n" > "$OUTPUT_FILENAME";
for element in "$FILES_DIR"/*; do
    element=`echo $element | sed 's|/var/www/||'` # <-- удаляем
    printf "<a href=\"%s\">%s</a>\n" "$element" "$element" >> "$OUTPUT_FILENAME";
done
printf "</BODY></HTML>\n" >> "$OUTPUT_FILENAME";

Примерно так
HP G62 (AMD Phenom II x3 1.8GHz 4GB DDR3 Ram) / Debian 8 amd64
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4458
Статус: GNU generation
ОС: Debian GNU/Linux

Re: BASH Scripting

Сообщение Rootlexx »

Diman писал(а):
24.07.2009 18:28
Всё работает, только косяк один. Он полное имя файла берёт и потом его не находит на сервере, ибо ссылка выглядит так:
http://localhost/var/www/files/file.png
вместо:
http://localhost/files/file.png

Т.е. в переменную element можно как-то неполное имя файла засунуть? Или при записи в файл убрать "/var/www/"?

Можно.
Cra3y писал(а):
24.07.2009 18:45

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

#!/bin/bash

OUTPUT_FILENAME="/var/www/files.html";
FILES_DIR="/var/www/files";

printf "<HTML><BODY>\n" > "$OUTPUT_FILENAME";
for element in "$FILES_DIR"/*; do
    element=`echo $element | sed 's|/var/www/||'` # <-- удаляем
    printf "<a href=\"%s\">%s</a>\n" "$element" "$element" >> "$OUTPUT_FILENAME";
done
printf "</BODY></HTML>\n" >> "$OUTPUT_FILENAME";

Примерно так

Можно проще:

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

#!/bin/bash

OUTPUT_FILENAME="/var/www/files.html";
WWW_DIR="/var/www";
FILES_SUBDIR="files";

printf "<HTML><BODY>\n" > "$OUTPUT_FILENAME";
cd "$WWW_DIR";
for element in "$FILES_SUBDIR"/*; do
    printf "<a href=\"%s\">%s</a>\n" "$element" "$element" >> "$OUTPUT_FILENAME";
done
printf "</BODY></HTML>\n" >> "$OUTPUT_FILENAME";


Добавлено (18:55): можно вообще так:

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

#!/bin/bash

OUTPUT_FILENAME="/var/www/files.html";
WWW_DIR="/var/www";
FILES_SUBDIR="files";

printf "<HTML><BODY>\n" > "$OUTPUT_FILENAME";
cd "$WWW_DIR";
find "$FILES_SUBDIR" | awk '{ print "<a href=\"" $N "\">" $N "</a>" }' >> "$OUTPUT_FILENAME";;
printf "</BODY></HTML>\n" >> "$OUTPUT_FILENAME";
:).
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: BASH Scripting

Сообщение KDimanB »

Спасибо! Всё отлично работает :happy:

А что-то printf больше С напоминает - это точно bash-оператор? :blush:
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4458
Статус: GNU generation
ОС: Debian GNU/Linux

Re: BASH Scripting

Сообщение Rootlexx »

Diman писал(а):
24.07.2009 18:59
А что-то printf больше С напоминает - это точно bash-оператор?

Встроенная команда BASH:
(help bash) писал(а):printf: printf [-v var] format [arguments]
printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT
is a character string which contains three types of objects: plain
characters, which are simply copied to standard output, character escape
sequences which are converted and copied to the standard output, and
format specifications, each of which causes printing of the next successive
argument. In addition to the standard printf(1) formats, %b means to
expand backslash escape sequences in the corresponding argument, and %q
means to quote the argument in a way that can be reused as shell input.
If the -v option is supplied, the output is placed into the value of the
shell variable VAR rather than being sent to the standard output.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: BASH Scripting

Сообщение drBatty »

Diman писал(а):
24.07.2009 18:59
А что-то printf больше С напоминает - это точно bash-оператор?

это
1)функция C из <stdio.h>
2)встроенная команда bash
3)исполняемый файл bash
варианты 2 и 3 почти идентичные, второй побыстрее обычно...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: BASH Scripting

Сообщение KDimanB »

Посдкажите - как отобразить все папки, в которых лежит 2 или больше jpg-файла?
Или хотя бы просто название каждой папки, в которой лежит каждый jpg - тогда там легко можно на глаз определить где их 2 или больше.

Я пытался вот так:

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

find / -name *jpg -exec ls -d {} \;

Не вышло, конечно. Может с параметром path у команды find можно как-то такое организовать?

Да, и как их все дружно переименовать в "cover.jpg"? Так?

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

find / -name *jpg -exec mv cover.jpg {} \;

Хотя не... там же как-то надо у mv указать входящий файл, что-то вроде:

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

find / -name *jpg -exec mv %F cover.jpg {} \;

только откуда бы взять этот %F =\
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: BASH Scripting

Сообщение diesel »

Diman писал(а):
22.08.2009 17:29
Посдкажите - как отобразить все папки, в которых лежит 2 или больше jpg-файла?
Или хотя бы просто название каждой папки, в которой лежит каждый jpg - тогда там легко можно на глаз определить где их 2 или больше.

в которой лежит хотя бы один:

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

find / -name *jpg 2>/dev/null | sed -e 's![^/]*$!!' | sort -u


не один:

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

find  -name *jpg 2>/dev/null | sed -e 's![^/]*$!!' | sort | uniq -c | grep -vE '[\t\n]*1 ' | awk '{print $2}'


Diman писал(а):
22.08.2009 17:29
Да, и как их все дружно переименовать в "cover.jpg"? Так?

переименовать что?
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: BASH Scripting

Сообщение KDimanB »

diesel писал(а):
22.08.2009 18:34
Diman писал(а):
22.08.2009 17:29
Посдкажите - как отобразить все папки, в которых лежит 2 или больше jpg-файла?
Или хотя бы просто название каждой папки, в которой лежит каждый jpg - тогда там легко можно на глаз определить где их 2 или больше.

в которой лежит хотя бы один:

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

find / -name *jpg 2>/dev/null | sed -e 's![^/]*$!!' | sort -u


не один:

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

find  -name *jpg 2>/dev/null | sed -e 's![^/]*$!!' | sort | uniq -c | grep -vE '[\t\n]*1 ' | awk '{print $2}'


Diman писал(а):
22.08.2009 17:29
Да, и как их все дружно переименовать в "cover.jpg"? Так?

переименовать что?

Спасибо.
Вот первый скрипт хорошо работает - показывает полные пути вплоть до последнего каталога.
А второй только глубину в 2 каталога почему-то выводит - т.е. понять где атм дальше лежат файлы не очень возможно.

Ну да ладно. Это я разберу с помощью первого скрипта. Вот переименование теперь важно. Потому что я тут решил через GUI попробовать - там и не понял как заставить GnomeCommander или Nautilus массово переименовать - придётся через bash.

А переименовать надо так, чтобы ВСЕ jpg-картинки в каталоге ~/music и его подкаталогах стали с именем "cover.jpg".
Ну я свою музыку разбираю - хочу чтобы в каждой папке осталось по одному jpg файлу и он назывался "cover.jpg" :)
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: BASH Scripting

Сообщение diesel »

Diman писал(а):
22.08.2009 18:43
Спасибо.
Вот первый скрипт хорошо работает - показывает полные пути вплоть до последнего каталога.
А второй только глубину в 2 каталога почему-то выводит - т.е. понять где атм дальше лежат файлы не очень возможно.


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

find /  -name *jpg 2>/dev/null | sed -e 's![^/]*$!!' | sort | uniq -c | grep -vE '[\t\n]*1 ' | awk '{print $2}'


просто надо задать путь поиска. Поскольку тестировал у себя - то убрал / - больно много найдет. Следует учесть что оно ищет по всей файловой системе - врядли это то что вам надо.

Diman писал(а):
22.08.2009 18:43
А переименовать надо так, чтобы ВСЕ jpg-картинки в каталоге ~/music и его подкаталогах стали с именем "cover.jpg".
Ну я свою музыку разбираю - хочу чтобы в каждой папке осталось по одному jpg файлу и он назывался "cover.jpg" :)

то есть вы осознаете что если делать mv для нескольких картинок в подпапке на одно и тоже имя, то останется только одна? Причем достаточно рэндомно...
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: BASH Scripting

Сообщение KDimanB »

diesel писал(а):
22.08.2009 18:48

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

find /  -name *jpg 2>/dev/null | sed -e 's![^/]*$!!' | sort | uniq -c | grep -vE '[\t\n]*1 ' | awk '{print $2}'


просто надо задать путь поиска. Поскольку тестировал у себя - то убрал / - больно много найдет. Следует учесть что оно ищет по всей файловой системе - врядли это то что вам надо.

то есть вы осознаете что если делать mv для нескольких картинок в подпапке на одно и тоже имя, то останется только одна? Причем достаточно рэндомно...

Ну я догадался, что путь поиска надо задать :laugh:
С ним и не работает.

Да, я осознаю, что он либо убьёт пару картинок, либо напишет ошибки (что прекрасно - я найду и руками поправлю).
Но по моим подсчётам таких папок штуки 3-4 осталось. И хрен бы с ними - найти бы способ переименовать теперь всю кучу jpg-файлов :)
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: BASH Scripting

Сообщение diesel »

ну самый простой вариант:

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

find -iname '*.jpg' | while read i; do mv "$i" "$(dirname "$i")/cover.jpg"; done
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: BASH Scripting

Сообщение KDimanB »

diesel писал(а):
22.08.2009 19:15
ну самый простой вариант:

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

find -iname '*.jpg' | while read i; do mv "$i" "$(dirname "$i")/cover.jpg"; done


Спасибо! Всё переименовалось :happy:
Спасибо сказали:
Аватара пользователя
strangeman
Сообщения: 160
Статус: заблудившийся биоробот
ОС: Ubuntu 12.04, Debian 6

Re: BASH Scripting

Сообщение strangeman »

Осваиваю bash и застрял на простой, в общем-то, задаче. Необходимо от лога в кодировке, отличной от системной, отрезать данные за текущий и предыдущий час текущих суток (т.е. в 00:15 надо будет получить данные всего за 15 минут, в 01:15 - за час 15 и т.д.), причем не все подряд, а содержащие определенную подстроку. Наваял скриптик, но он не работает... :(
Время в логе имеет следующий формат: ГГГГММДД;ЧЧ (20090903;15 20090903;05)

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

#!/bin/bash
LOGPATH=~/script
HOUR=$(date '+%k') #текущий час
LHOUR=0$((HOUR-1)) #предыдущий час
HOUR=0$((HOUR))
iconv -f cp1251 -t utf-8 $LOGPATH/big.log | grep "$(date '+%Y%m%d;')${HOUR:(-2)} | $(date '+%Y%m%d;')${LHOUR:(-2)}" | grep 'подстрока, которую должны иметь отбираемые записи' > $LOGPATH/small.log


Понимаю, что код получился индусским, но познаний в bash'e пока не хватает. :(
Спасибо сказали:
Аватара пользователя
_GV
Сообщения: 107
Статус: секта красных утюгов
ОС: Gentoo linux

Re: BASH Scripting

Сообщение _GV »

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

#!/bin/bash
LOGPATH=~/script
HOUR=$(date '+%k')
#Дальше индусский однострочник
REGEX="$(date '+%Y%m%d;')$(printf '%02d' ${HOUR}) | $(date '+%Y%m%d;')$(printf '%02d' $((HOUR-1>=0?HOUR-1:0)) )"
iconv -f cp1251 -t utf8 $LOGPATH/big.log | grep "${REGEX}" | grep 'твой фильтр' > $LOGPATH/small.log
Спасибо сказали:
Аватара пользователя
strangeman
Сообщения: 160
Статус: заблудившийся биоробот
ОС: Ubuntu 12.04, Debian 6

Re: BASH Scripting

Сообщение strangeman »

Неа, не совсем так.
Вот так работает, в grep'e же элементы списка образцов должны разделяться переводом строки... Большое спасибо за помощь!

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

#!/bin/bash
LOGPATH=~/script
HOUR=$(date '+%k')
#Дальше индусский однострочник с переводом строки
REGEX="$(date '+%Y%m%d;')$(printf '%02d' ${HOUR})
$(date '+%Y%m%d;')$(printf '%02d' $((HOUR-1>=0?HOUR-1:0)) )"
iconv -f cp1251 -t utf8 $LOGPATH/big.log | grep "${REGEX}" | grep 'твой фильтр' > $LOGPATH/small.log
Спасибо сказали: