Удаление поворяющихся фраз через bash

Языки программирования, IDE, компиляторы, интерпретаторы, гипервизоры и виртуальные среды
Правила форума
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Версия ОС вместе с разрядностью. Пример: LM 18.1 x64, LM Sarah x32 2. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 3. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 4. Суть. Желательно с выводом консоли, логами. 5. Скрин. Просьба указывать 1, 2 и 3 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

rogoznik
Сообщения: 5797
Зарегистрирован: 27 июн 2017, 10:36
Решено: 62
Откуда: Нижний Тагил
Благодарил (а): 321 раз
Поблагодарили: 1064 раза

Удаление поворяющихся фраз через bash

Сообщение rogoznik » 01 мар 2019, 04:12

Chocobo писал(а):
28 фев 2019, 20:54
Давай попробуем укоротить и ограничиться функциями самого баша, без вызова утилит
Сколько не гуглил - все примеры сбыли с sed.
Вот только тут вывод ты сделал, а ведь надо обратно в тот же файл засунуть и в том же порядке. Хотя можно записать сначала в массив, удалить данные из файла(тут придется всяко вызывать какие-то утилиты типа cat /dev/null > listoflines.txt) - возможно есть и другой способ очистить файл, а потом записать в файл
Типа такого

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

#! /bin/bash

i=0
s=/home/minter/Exchange/Curious/

while read LINE; do
    array[$i]=$(echo "${LINE##*$s}")
    i=$(($i+1))
done < 1.txt

cat /dev/null > 1.txt

for ((a=0; a < ${#array[*]}; a++))
do
    echo "${array[$a]}" >> 1.txt
done

ИзображениеИзображение

Аватара пользователя

Chocobo
Сообщения: 9268
Зарегистрирован: 27 авг 2016, 19:57
Решено: 200
Откуда: НН
Благодарил (а): 645 раз
Поблагодарили: 2677 раз

Удаление поворяющихся фраз через bash

Сообщение Chocobo » 01 мар 2019, 06:46

darkfenix писал(а):
01 мар 2019, 04:12
Вот только тут вывод ты сделал, а ведь надо обратно в тот же файл засунуть и в том же порядке
Ну а тут я бы не стал так упираться на само условие "в тот же файл". Перенаправить stdout в соседний файл, и фиг с ним)
bash script.sh > edited.txt
или подсунуть следом результативный файл вместо исходного, когда отработает цикл
bash script.sh > edited.txt; mv edited.txt listoflines.txt

Можно и не выходя на уровень запуска, запихать туда же внутрь конструкции

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

#! /bin/bash
str=/home/minter/Exchange/Curious
while read LINE; do
echo "${LINE##*$str}"
done < listoflines.txt > edited.txt
mv edited.txt listoflines.txt
Изображение
   
Изображение

Аватара пользователя

rogoznik
Сообщения: 5797
Зарегистрирован: 27 июн 2017, 10:36
Решено: 62
Откуда: Нижний Тагил
Благодарил (а): 321 раз
Поблагодарили: 1064 раза

Удаление поворяющихся фраз через bash

Сообщение rogoznik » 01 мар 2019, 07:48

В общем, накидали ТСу вариантов - пусть теперь сам решает как ему удобней будет
ИзображениеИзображение

Аватара пользователя

Автор темы
madesta
Сообщения: 398
Зарегистрирован: 11 июн 2017, 18:47
Решено: 7
Благодарил (а): 26 раз
Поблагодарили: 73 раза

Удаление поворяющихся фраз через bash

Сообщение madesta » 01 мар 2019, 09:33

Недоработочка, а точнее выразиться, хотелось бы расширения функционала форума. Второй раз сталкиваюсь с ситуацией, когда конкретная помощь оказана несколькими вариантами решения. А отметить их все как решение в рамках существующего механизма невозможно и приходится ограничиваться благодарностями, отдав "решено" первому рабочему варианту. Хотя по отношению к остальным решениям это, по моему мнению, будет не совсем справедливым.

В формулировке задачи тоже, признаю, нужно было дать больше информации. В частности, касается указания того, что конкретно необходимо нужно было удалить из каждой строки. А то, получается, упоминания /path/ было недостаточно.

Хотелка была предназначена для совершенствования процедур автоматизации операций, в ходе которых в папках обмена удаляется контент старше N дней и по каждой папке формируется отчёт с перечнем удаляемых данных. Со временем, наличие в файлах отчётов длинных строк, в которых повторяется путь (напр., /home/minter/Exchange/Curious) стало вызывать неудовольствие в плане удобства чтения этих файлов.
Увы, самостоятельно осилить задачу мозгов не хватило. :dash2:

Вернуться в «Программирование, скриптинг, виртуализация»