LINUX.ORG.RU

Ответ на: комментарий от crutch_master

А без временного нельзя :).
Может и можно придумать какой-то хитрый хак, но делать этого не стоит.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от crutch_master

В пайпе можно чем-нибудь собрать все данные [в память], а потом в тот же файл залить?

Можно, конечно. Вас готовые утилитки интересуют? sponge(1).

Но делать так не надо. Для редактирования файлов существуют файловые редакторы.

Zmicier ★★★★★
()
Ответ на: комментарий от anonymous

Именно поэтому.

А точнее потому, что это не временный файл, а новый постоянный. Что в корне противоречит принципу наименьшего удивления.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Но делать так не надо. Для редактирования файлов существуют файловые редакторы.

У меня не продакшен. Слеши убрать, кавычки после jq и пр муть.

crutch_master ★★★★★
() автор топика

Суть проблемы в том, что перенаправление >file работает ДО cat (а также и до grep ... file).
Попробуйте подать данные на вход тоже перенаправлением.

bormant ★★★★★
()
Ответ на: комментарий от crutch_master

И что? Как это мешает использовать для редактирования файлов файловые редакторы вместо костылей?

#!/bin/bash

ed -s "$1" << EOF
%v/regex/d
wq
EOF
Zmicier ★★★★★
()
Ответ на: комментарий от crutch_master

Это тот случай, когда лечение хуже болезни. Результат априори будет уродливее и ненадежнее, чем временный файл.

Deleted
()
Ответ на: комментарий от Deleted

Ну, если очень хочется именно так, то как-то так, наверное:

buf=$(grep 'regex' "$file")
printf '%s' "$buf" > "$file"
Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Как это мешает использовать для редактирования файлов файловые редакторы вместо костылей?

Костыли приросшие к рукам.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от Zmicier

Собственно, все решения, предложенные в треде - обоснование убедительнее некуда. Бóльшая их часть ТСу вообще непригодны, ибо не позволяют использовать паровоз из нескольких грепов.

Deleted
()
Ответ на: комментарий от Deleted

Спасибо, вы правы. На больших файлах всё встало колом.

Надёжнее использовать временный файл или утилиту, предназначенную специально для подобных фокусов:

cat file | grep text | sponge file

evbogdanov
()
Ответ на: комментарий от evbogdanov

Я избегаю использовать утилиты, не входящие в базовую установку популярных дистрибутивов. Хотя для локалхоста годится.

Deleted
()
Ответ на: комментарий от trashymichael

Так делать нельзя. Ибо нет гарантий, что файл не будет обрезан.

Пример фейла:

$ seq 1000000 > src

$ grep 5 src | wc -l
  468559

$ grep 5 src | tee src

$ wc -l src 
    2586 src
evbogdanov
()
Ответ на: комментарий от Deleted

офтоп конечно, но с чем это связано? какие-то рестрикты и полиси на предприятии?
просто даже до линукса стали доходить тренда наделять утилиты возможностью выдавать информацию в json, но упомянутый уже jq, в базовую поставку ещё долго не войдёт.
я к тому, что список ПО для базовой установки не доктора наук составляют, чего на них ровняться?

system-root ★★★★★
()
Ответ на: комментарий от trashymichael
user@localhost /tmp $ ls > file
user@localhost /tmp $ grep konsole file
konsole-B11999.history
konsole-E11999.history
konsole-t11999.history
user@localhost /tmp $ grep konsole file | tee file
user@localhost /tmp $ cat file
user@localhost /tmp $ 
sudopacman ★★★★★
()
Ответ на: комментарий от system-root

Просто не хочу чтобы мои скрипты выкидывали command not found на ровном месте. Если иначе не обойтись - ничего не поделаешь, а в угоду «хочу однострочник» - нафиг.

Deleted
()
Ответ на: комментарий от d_a

Классное решение

Классное до ответа на вопросы
1. В каких шеллах это работает?
2. Сколько времени потребуется человеку со стороны чтобы определить, нет ли тут ошибки?
3. Решает ли оно вообще поставленную задачу?

Deleted
()
Ответ на: комментарий от Deleted

См. тэги и не задавай тупые вопросы. И да, делает это **буквально** то что он хотел.

d_a ★★★★★
()
Последнее исправление: d_a (всего исправлений: 1)
Ответ на: комментарий от question4

sponge(1)

В каком она пакете?

В каком пакете в какой поставке ГНУ? Впрочем, думаю, что в любом случае в moreutils.

Но что́ у вас за поставка такая, что спросить на ЛОРе проще, чем у нее самой, хотелось бы знать.

Zmicier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.