cat ./file | grep -v "222" > ./file непонимаю

Модератор: Модераторы разделов

Demimurych
Сообщения: 295

cat ./file | grep -v "222" > ./file непонимаю

Сообщение Demimurych »

имеем файл file
cat ./file
111
222
333

Далее Делаем
cat ./file | grep -v "222"
111
333

Далее
cat ./file | grep -v "222" > ./file
cat ./file

Ответ пусто в файле ничего нет
ежели опять создать файл с тем же содрежимым и сделать так
cat ./file | grep -v "222" > ./file2
cat ./file2
111
333

то есть вроде бы верно
Берем другую машину
Делаем
cat ./file | grep -v "222" > ./file
сat ./file
111
333

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

Не дайти поехать крышей обьсните - куда рыть
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение t.t »

(Demimurych @ Вторник, 12 Апреля 2005, 12:18) писал(а):Иначе говоря на одно машине операция привела к одному результату на другой совершенно к другому

Не дайти поехать крышей обьсните - куда рыть
Для начала в строну grep -V :)
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Demimurych
Сообщения: 295

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение Demimurych »

(t.t @ Вторник, 12 Апреля 2005, 12:25) писал(а):
(Demimurych @ Вторник, 12 Апреля 2005, 12:18) писал(а):Иначе говоря на одно машине операция привела к одному результату на другой совершенно к другому

Не дайти поехать крышей обьсните - куда рыть
Для начала в строну grep -V :)



Не годитсья
потому как во первых одни и таже ОС
Во творых
перд всеми операциями делаю проверку
cat ./file | grep -v "222"

п после потовряю
cat ./file | grep -v "222" > ./file

На одной машине получю один результат на вторйо второй
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение t.t »

(Demimurych @ Вторник, 12 Апреля 2005, 12:33) писал(а):Не годитсья
потому как во первых одни и таже ОС
Так вы уверены, что версии грепа совпадают?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
bogus
Сообщения: 160

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение bogus »

Греп тут более-менее непричем, по-моему.
cat file | sed > file тоже дает непредсказуемый результат.
Насколько я понял, даже cat file | grep > another_file может давать непредсказуемый результат в некоторых случаях...
Как всякое несовершенное существо я могу ошибаться. Простите меня.
jabberId = foldl (flip (:)) [] "ur.rebbaj@43sugob"
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение sash-kan »

по логике, от grep никак не зависит. возможно, от shell'а? от используемой fs? ведь при команде
cat ./file | grep ... > ./file
shell сначала должен произвести "усекновение" file'а.
почему этого не происходит во втором случае - великая загадка есть :)
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение t.t »

(Sash Kan @ Вторник, 12 Апреля 2005, 13:59) писал(а):по логике, от grep никак не зависит.
Хм.. Логично. Что-то я сегодня плохо соображаю. Вообще-то, конечно, конвейеризация на такие варианты не расчитана.
(bogus @ Вторник, 12 Апреля 2005, 13:50) писал(а):Насколько я понял, даже cat file | grep > another_file может давать непредсказуемый результат в некоторых случаях...
А вот это почему?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
JaGoTerr
Сообщения: 380

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение JaGoTerr »

Да ну вы что, господа, при чём же тут grep. Смешно даже. Причина ВОЗМОЖНО в оболочке. Вплоть до её версии, а также режима запуска (возможно где-то она запущена как login-shell, следовательно в режиме совместимости с sh/csh, а где-то нет). От ФС... ну фиг знает... не исключено.

Я вот только что проверил на:

Линукс + reiserfs 3:
bash 3.00.15, tcsh 6.13.00, zsh 4.2.1 - результат нормальный (на выходе file1 непуст).

Соляра 9 + ufs ( а что же ещё :) ):
tcsh 6.10.00, bash 2.05.0 - результат хреновый (file1 пуст).

То бишь... сравнение несколько косоватое, ибо нет идеального совпадения версий оболочек, чтобы можно было говорить о бесспорном влиянии типа ФС на процесс, но тем не менее... имхо, ФС тут более чем при чём.
Спасибо сказали:
Аватара пользователя
bogus
Сообщения: 160

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение bogus »

(t.t @ Вторник, 12 Апреля 2005, 14:03) писал(а):
(bogus @ Вторник, 12 Апреля 2005, 13:50) писал(а):Насколько я понял, даже cat file | grep > another_file может давать непредсказуемый результат в некоторых случаях...
А вот это почему?


Точно не разбирался, т.к. у меня это работает нормально. могу лишь процитировать из bbs.archlinux.org:
I'd recommend changing your sed line in your PKGBUILD. I ran into a nasty race condition on a HT system with a PKGBUILD that did something like what you've got. Rather than 'cat | sed > output', just use sed with the -i argument and copy the file over

этот комментарий относился к строке

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

 cat $startdir/system.mk | sed "s#ROOT=DUMMY#ROOT=$startdir/pkg#" > $startdir/src/ion-3ds-$pkgver/system.mk


bogus добавил в 12.04.2005 15:36

правда, возможно это относится именно к sed'у...
Как всякое несовершенное существо я могу ошибаться. Простите меня.
jabberId = foldl (flip (:)) [] "ur.rebbaj@43sugob"
Спасибо сказали:
Demimurych
Сообщения: 295

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение Demimurych »

повторяю.
Две совершенно одинаковые системы.
Разница небольшая в железе
Спасибо сказали:
Аватара пользователя
JaGoTerr
Сообщения: 380

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение JaGoTerr »

(Demimurych @ Вторник, 12 Апреля 2005, 15:58) писал(а):повторяю.
Две совершенно одинаковые системы.
Разница небольшая в железе

Если системы одинаковые, а ведут себя по-разному, значит они неодинаковые.
Значит ты не всё проверил или не всё о них знаешь (а всё о них никто не знает).
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение madskull »

А насколько "одинаковые" системы? Может, размер памяти разный, может, буфера забиты/сброшены. А может дождь за окном?
Короче, и на одной системе в разное время можно получить разные результаты. Почему? Не знаю.
Но зависимость размера файла от вероятности его потери - прямо пропорциональна.

В общем, не делайте так :)

Иногда, при больших файлах, бывает, что записывается только часть исходного содержимого...
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
rulix
Сообщения: 31

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение rulix »

Команда ">" обнуляет файл, в который перенаправляется вывод. Если из file перенаправлять в file, то он будет пустой.
С уважением,
Rulix

Debian Sid
Спасибо сказали:
Аватара пользователя
xorader
Сообщения: 1030
Статус: собирающий миры
ОС: Debian

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение xorader »

:megalol: :megalol: :megalol: :megalol:
потестируй просто cat file > file
Совет: не используй такую реализацию никогда! Реализации оболочек разные: некторые сначала открывают новый file (соотв-о inode и данные старые удаляются - файл пустой), некоторые сначала старый файл открывают (в результате с данными всё впорядке, так как дескриптор открыт и данные сохраняются пока он существует).

P.S. знаете зачем бегемоту большие круглые ступни ?
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение sash-kan »

Для JaGoTerr: поведение, когда при записи через ">" файл не усекается _до_ начала работы конвейера - как раз _ненормальное_


Sash Kan добавил в 12.04.2005 19:09

(Demimurych @ Вторник, 12 Апреля 2005, 15:58) писал(а):повторяю.
Две совершенно одинаковые системы.
Разница небольшая в железе

и cat одной версии?

Sash Kan добавил в 12.04.2005 19:14

только что проверил на трех _совершенно_ разных машин (разные ядра, shell-ы, версии cat).
везде поведение _нормальное_. file - пуст.
проверил еще на одной (freebsd 4.8, больше ничего узнать не удалось) - поведение _ненормальное_.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение madskull »

(xorader @ Вторник, 12 Апреля 2005, 16:59) писал(а):P.S. знаете зачем бегемоту большие круглые ступни ?

Ну, не томи...
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение nercus »

The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition
2. Shell Command Language
......
2.7.2 Redirecting Output
......
If the file does not exist, it shall be created; otherwise, it shall be truncated to be an empty file after being opened.

Стандарт аднака.
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение t.t »

(madskull @ Вторник, 12 Апреля 2005, 21:09) писал(а):
(xorader @ Вторник, 12 Апреля 2005, 16:59) писал(а):P.S. знаете зачем бегемоту большие круглые ступни ?
Ну, не томи...
Чтобы не проваливаться в маленькие квадратные ямы. Я ещё пару таких загадок знаю. Давать?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
JaGoTerr
Сообщения: 380

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение JaGoTerr »

(Sash Kan @ Вторник, 12 Апреля 2005, 18:14) писал(а):Для JaGoTerr: поведение, когда при записи через ">" файл не усекается _до_ начала работы конвейера - как раз _ненормальное_

Под "нормальный" в данном случае понималось скорее "желаемый" или как-то так. В общем, не придирайся к словам ;)

(Sash Kan @ Вторник, 12 Апреля 2005, 18:14) писал(а):только что проверил на трех _совершенно_ разных машин (разные ядра, shell-ы, версии cat).
везде поведение _нормальное_. file - пуст.
проверил еще на одной (freebsd 4.8, больше ничего узнать не удалось) - поведение _ненормальное_.

Вот я проверил - так из моего поста сразу это видно. Ибо написано на чём, как и каковы результаты. А фраза "проверил, везде вот эдак", честно говоря, не внушает доверия. Хотелось бы фактов! :yes:
Спасибо сказали:
Аватара пользователя
xorader
Сообщения: 1030
Статус: собирающий миры
ОС: Debian

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение xorader »

(t.t @ Среда, 13 Апреля 2005, 11:59) писал(а):
(madskull @ Вторник, 12 Апреля 2005, 21:09) писал(а):
(xorader @ Вторник, 12 Апреля 2005, 16:59) писал(а):P.S. знаете зачем бегемоту большие круглые ступни ?
Ну, не томи...
Чтобы не проваливаться в маленькие квадратные ямы. Я ещё пару таких загадок знаю. Давать?



Не угадал.. "что бы с кувшинки на кувшинку грациозно так *шлёп-шлёп*"
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение t.t »

(xorader @ Среда, 13 Апреля 2005, 12:58) писал(а):Не угадал.. "что бы с кувшинки на кувшинку грациозно так *шлёп-шлёп*"
Тоже вариант :)
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение sash-kan »

(JaGoTerr @ Среда, 13 Апреля 2005, 12:23) писал(а):Под "нормальный" в данном случае понималось скорее "желаемый" или как-то так. В общем, не придирайся к словам  ;)

больше не буду :)
(JaGoTerr @ Среда, 13 Апреля 2005, 12:23) писал(а):Вот я проверил - так из моего поста сразу это видно. Ибо написано на чём, как и каковы результаты. А фраза "проверил, везде вот эдак", честно говоря, не внушает доверия. Хотелось бы фактов!  :yes:

подробный сбор фактов открыл новые горизонты:

нормально себя ведут:
bash version 2.05b.0(1) под fc1 и debian sarge (каюсь - написал, что разные версии, на поверку оказалась одна)
zsh 4.0.7 под fc1 (вообще выдал ошибку zsh: file exists: file)
ash (неизвестной версии, на -v и --version не реагирует) из leaf bering uclibc

ненормально ведут себя:
tcsh 6.12.00 под fc1
tcsh 6.13.00 под debian sarge
zsh 4.2.1 под debian sarge

другие shell'ы тестировать было лень. думаю, и этого хватит с головой.
вот такие получаются пироги с котятами.
ау! стандарты! где вы!? молчат :))
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение nercus »

(Sash Kan @ Среда, 13 Апреля 2005, 15:07) писал(а):ау! стандарты! где вы!? молчат :))


ну я же дал ссылку на стандарт, на posix, где описано, как себя шелл ведет при redirection. чем не устраивает?
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение sash-kan »

(nercus @ Среда, 13 Апреля 2005, 19:07) писал(а):
(Sash Kan @ Среда, 13 Апреля 2005, 15:07) писал(а):ау! стандарты! где вы!? молчат :))


ну я же дал ссылку на стандарт, на posix, где описано, как себя шелл ведет при redirection. чем не устраивает?


дык я эта, про эта самое. про стандарты, которые кто-то кое-где у нас порой не очень-то соблюдает.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
ddc
Бывший модератор
Сообщения: 3535
Статус: OpenBSD-compatible
ОС: OpenBSD -current

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение ddc »

Для Sash Kan:
Ну это как всегда, пока не на все стандарты клал - не мужчина. :(
Кстати, может кто в курсе, Linux собирается становиться UNIX2000-compatible?
Спасибо сказали:
Аватара пользователя
Golden
Сообщения: 163
ОС: Ubuntu Linux 7.10

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение Golden »

(czarker @ Среда, 13 Апреля 2005, 20:03) писал(а):Кстати, может кто в курсе, Linux собирается становиться UNIX2000-compatible?

Можно подробнее? А то гугль дал такие разнообразные ссылки, что трудно сразу найти первоисточник
Спасибо сказали:
Аватара пользователя
alphex_kaanoken
Сообщения: 30

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение alphex_kaanoken »

по логике результат с один и тем же файлом не предсказуем
то есть когда
cat file | grep "foo" > file
ты открываешь поток - через pipe прогоняешь его и в тот же поток пихаешь, логикой думать надо - что будет если cat файл не закрыл а вывод уже сделан в файл - как там насчет позиционирования текущего в файле?
поэтому корректней - будет везде работать
cat file | grep "foo" > file_tmp && mv file_temp file
если тебе надо тоже имя сохранить.
От фс и железа в твоем случае ну никак не зависит.

alphex_kaanoken добавил в 15.04.2005 00:30

2rulix - это верно, но опять думаем - сделай >> что будет ?

и корректнее сказать не "обнуляет" а открывает файл только на запись.
Don't try to look deeper, just look deeper than deep. ©
Спасибо сказали:
Аватара пользователя
ddc
Бывший модератор
Сообщения: 3535
Статус: OpenBSD-compatible
ОС: OpenBSD -current

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение ddc »

Для Golden:
Спецификация такая была, сейчас только AIX признана соответвующей ей. Подробней не знаю.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение t.t »

(alphex_kaanoken @ Четверг, 14 Апреля 2005, 23:30) писал(а):и корректнее сказать не "обнуляет" а открывает файл только на запись.
Да я посмотрю, вы (уж простите) -- придираст...
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
alphex_kaanoken
Сообщения: 30

Re: cat ./file | grep -v "222" > ./file непонимаю

Сообщение alphex_kaanoken »

нет я просто люблю когда все нзывают своими именами =)
и не придирка это а дотошность.

а про mm в другом посте я не стал расписывать, так как это тема вообще отдельная и одним примечанием в мане не ограничивается.

Могу завести дискуссию - по поводу различных реализаций и как и в каких случаях правлиьней делать.

Я не кричу кстати что умнее всех - в одном я меньше знаю в другом больше - понять думаю это не сложно ?
Don't try to look deeper, just look deeper than deep. ©
Спасибо сказали: