Страница 2 из 2

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

Добавлено: 01 мар 2019, 07:12
rogoznik
Chocobo писал(а):
28 фев 2019, 23: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


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

Добавлено: 01 мар 2019, 09:46
Chocobo
darkfenix писал(а):
01 мар 2019, 07: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

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

Добавлено: 01 мар 2019, 10:48
rogoznik
В общем, накидали ТСу вариантов - пусть теперь сам решает как ему удобней будет

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

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

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

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