LinuxForum.Fans
Тема

Скрипт на копирование файлов с добавлением даты

Автор: sinxron 28 сообщений 10568 просмотров
#270010
"sinxron" написал:
Спасибо, но что то не выходит у меня ac после добовления строчки всё остальное не выполняется. Прошу не пинать сильно т.к новичек в этом деле.

DATE=$(sed -n '1{s|^.*\([0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}\).*$|\1|;p}')

эту строчку надо добавлять внутрь цикла
обдумайте сами: строчка получает дату из файла. Из какого? Вот и я не вижу...

#270064

#!/bin/bash

for d in /home/[1-5];
do
for f in "$d"/*
do
[ -f "$f" ] && mv "$f" "/home/base/FILE$(basename "$d")$(head -1 $f | cut -c 27-34).${f#*.}"
done
done

Вот так всё работает если дата на фиксированной позиции , а если нет ...... а вот SED так и не могу запихнуть. читает только последнюю дату в файле .

строчка
00000000012-12-12000000000012-11-11000000000012-10-10000000000 SED выдаёт 12-10-10

а если просто запустить SED работает. Не хочет работать почемуто этот кусок .*$|\1|;p}') из SED

#270175
"sinxron" написал:
строчка
00000000012-12-12000000000012-11-11000000000012-10-10000000000 SED выдаёт 12-10-10

ну и нормально. А вы что хотели? Читаем про жадность.

#270198

Спасибо за хороший MAN

#270202
drBatty написал:
.

доктор, не нашел в вашем мануале описания различия между конвейером и опцией

sed -e ... -e ... -e ... VS sed ... | sed ... | sed ...

почему sed ведет себя по разному в некоторых случаях?

может как нибудь обновите мануальчик?

#270353
"moshell" написал:
почему sed ведет себя по разному в некоторых случаях?

а почему он должен себя одинаково вести о_О

sed -e -e — все скрипты выполняются в одном контексте, а sed | sed — совершенно независимо.
[console]
$ echo qwe | sed -e x -e x
qwe
$ echo qwe | sed -e x | sed -e x

[/console]

[оффтоп] drBatty, рад видеть...

#270585
"moshell" написал:
доктор, не нашел в вашем мануале описания различия между конвейером и опцией

потому-что это не имеет никакого отношения к sed.
Опция -e вообще не имеет никакого смысла (кроме использования команд, у которых имеется параметр - имя файла, или иная строка. Но даже в этом случае, я предпочитаю использовать многострок или файл-скрипт)

"moshell" написал:
почему sed ведет себя по разному в некоторых случаях?

ну потому-что sed -e x -e x эквивалентно sed 'x;x', т.е. для каждой строки выполняются две команды последовательно. В данном случае,

1. обменивается буфер и область удержания
2. обменивается область удержания и буфер

Очевидно, результат от этого не меняется.

Если вы запускаете ДВЕ команды sed 'x' | sed 'x', то
1. обменивается исходная строка и ПЕРВАЯ область удержания (из первой команды)
2. обменивается ВТОРАЯ область удержания, с ПЕРВОЙ областью, которая поступила из конвейера.

Результат первого случая:

text
$ echo "a
b
c
d" | sed 'x;x'
a
b
c
d

(нет изменений)

результат второго:

text
$ echo "a
b
c
d" | sed 'x' | sed 'x'

a b

(задержка на 2 строки - первая строка сначала уходит в первую область удержания, затем во вторую, а уж затем выходит из конвейера)

ЗЫЖ замечу, что конвейер намного дольше работает, хотя некоторые вещи без него не сделать. К примеру sed = выдаёт номер строки, но выдаёт его только наружу, потому поймать и обработать его можно лишь второй sed...

#270586

"Fat-Zer" написал:
оффтоп] drBatty, рад видеть...
взаимно
Войдите или зарегистрируйтесь, чтобы ответить.