Удаление поворяющихся фраз через bash
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод
inxi -Fxz
в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
-
Автор темы - Сообщения: 2018
- Зарегистрирован: 11 июн 2017, 21:47
- Решено: 30
- Откуда: BY
- Благодарил (а): 79 раз
- Поблагодарили: 434 раза
- Контактная информация:
Удаление поворяющихся фраз через bash
Имеются файлы отчётов, в которых присутствует повторяющихся путь и далее имена файлов и/или папок.
Например:
/path/file.txt
/path/file.odt
path/folder1
path/folder1/file.avi
path/folder2
path/folder2/file.mp3
/path/folder2/file.ogg
Может кто-нибудь подсказать команду bash для удаления в файле повторяющегося пути /path/ или какой раздел man попытаться изучить?
Например:
/path/file.txt
/path/file.odt
path/folder1
path/folder1/file.avi
path/folder2
path/folder2/file.mp3
/path/folder2/file.ogg
Может кто-нибудь подсказать команду bash для удаления в файле повторяющегося пути /path/ или какой раздел man попытаться изучить?
Решение
Если там где "старое_слово" есть
В твоем случае есть путь
А теперь следуем инструкции и получаем
А так как нам нужно убрать не оставляя даже пробела то получается так
.
В итоге имеем
Перейти к ответу ➙
Тут нужно понять принцип.
Если там где "старое_слово" есть
/
его надо экранировать что и сделано в моем примере скрипта /\/path/
- \
перед /path
.В твоем случае есть путь
/home/minter/Exchange/Curious/
в нем нужно экранировать все /
, т.е. должно получиться так \/home\/minter\/Exchange\/Curious\/
.А теперь следуем инструкции и получаем
Код: Выделить всё
sed -e 's/\/home\/minter\/Exchange\/Curious\//новое_слово/'
Код: Выделить всё
sed -e 's/\/home\/minter\/Exchange\/Curious\///'
В итоге имеем
Перейти к ответу ➙
-
- Сообщения: 6875
- Зарегистрирован: 27 авг 2016, 20:03
- Решено: 30
- Откуда: Voskresensk
- Благодарил (а): 1312 раз
- Поблагодарили: 724 раза
- Контактная информация:
Удаление поворяющихся фраз через bash
Fslint Janitor хорош в этом плане. Ищет по содержимому. Т.е. если даже файлы названы по-разному все равно скажет что они одинаковы. (гуй).. /как решение данной задачи...
-
- Сообщения: 10044
- Зарегистрирован: 27 июн 2017, 13:36
- Решено: 129
- Откуда: Нижний Тагил
- Благодарил (а): 776 раз
- Поблагодарили: 1958 раз
- Контактная информация:
Удаление поворяющихся фраз через bash
Dja, так ТСу же не файлу надо сравнивать. А, если я правильно понял, надо в каждом файле, в каждой строке удалить определенную часть строки, если таковая часть имеется.
-
- Сообщения: 938
- Зарегистрирован: 16 фев 2017, 20:03
- Решено: 5
- Откуда: г. Хабаровск
- Благодарил (а): 268 раз
- Поблагодарили: 262 раза
- Контактная информация:
Удаление поворяющихся фраз через bash
Что конкретно вы хотите увидеть? Непонятно. Картину вроде этой:
?/path/file.txt
/path/file.odt
path/folder1
path/folder1/file.avi
path/folder2
path/folder2/file.mp3
/path/folder2/file.ogg
Вы не готовы!
-
- Сообщения: 10044
- Зарегистрирован: 27 июн 2017, 13:36
- Решено: 129
- Откуда: Нижний Тагил
- Благодарил (а): 776 раз
- Поблагодарили: 1958 раз
- Контактная информация:
Удаление поворяющихся фраз через bash
root, думается что хочет так
Было
Стало
Было
Код: Выделить всё
/path/file.txt
/path/file.odt
path/folder1
path/folder1/file.avi
path/folder2
path/folder2/file.mp3
/path/folder2/file.ogg
Код: Выделить всё
/file.txt
/file.odt
/folder1
/folder1/file.avi
/folder2
/folder2/file.mp3
/folder2/file.ogg
-
- Сообщения: 5469
- Зарегистрирован: 27 авг 2016, 19:06
- Решено: 32
- Откуда: Арзамас
- Благодарил (а): 1593 раза
- Поблагодарили: 1276 раз
- Контактная информация:
Удаление поворяющихся фраз через bash
Когда мне понадобилось убрать из текстового файла повторяющиеся слова, выкрутился при помощи такой мудрёной конструкции
Где:
file_src.txt - исходный файл
file_dst.txt - файл с результатом
Код: Выделить всё
sed -r ':a; s/\b(alnum:+)\b(.*)\b\1\b/\1\2/g; ta; s/(, )+/, /g; s/, *$//' file_src.txt > file_dst.txt
file_src.txt - исходный файл
file_dst.txt - файл с результатом
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)
-
- Сообщения: 5469
- Зарегистрирован: 27 авг 2016, 19:06
- Решено: 32
- Откуда: Арзамас
- Благодарил (а): 1593 раза
- Поблагодарили: 1276 раз
- Контактная информация:
Удаление поворяющихся фраз через bash
darkfenix, вообще ни чего не удалил Все строки разные же
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)
-
Автор темы - Сообщения: 2018
- Зарегистрирован: 11 июн 2017, 21:47
- Решено: 30
- Откуда: BY
- Благодарил (а): 79 раз
- Поблагодарили: 434 раза
- Контактная информация:
Удаление поворяющихся фраз через bash
В принципе, почти верно. Только в окончательном варианте хотелка такая:darkfenix писал(а): ↑27 фев 2019, 18:07root, думается что хочет так
БылоСталоКод: Выделить всё
/path/file.txt /path/file.odt path/folder1 path/folder1/file.avi path/folder2 path/folder2/file.mp3 /path/folder2/file.ogg
Код: Выделить всё
/file.txt /file.odt /folder1 /folder1/file.avi /folder2 /folder2/file.mp3 /folder2/file.ogg
Код: Выделить всё
file.txt
file.odt
folder1
folder1/file.avi
folder2
folder2/file.mp3
folder2/file.ogg
К сожалению, приемлемого рабочего варианта пока не нашёл.
P.S. В формулировке задания ошибочка, сорри. Везде должно быть /path/ А то в половине строк path/
Под /path/ следует понимать путь, например, /home/user/data/folder2/folder2-1/folder2-1-1
Файлы отчётов генерируются командой ls
Поспешил и может кого-нибудь рассмешил ...
Последний раз редактировалось пользователем 2 madesta; всего редактировалось раз: 27
-
Автор темы - Сообщения: 2018
- Зарегистрирован: 11 июн 2017, 21:47
- Решено: 30
- Откуда: BY
- Благодарил (а): 79 раз
- Поблагодарили: 434 раза
- Контактная информация:
Удаление поворяющихся фраз через bash
Сорри, туплю. С возрастом мозги уже не те.
Насколько я понимаю, паттерн - это то, что надо удалить?
Полагал, что фразу, указывающую на путь, можно задать как переменную,
например del=/home/user/foler1/folder2/ и тогда уже оперировать $del
Насколько я понимаю, паттерн - это то, что надо удалить?
Полагал, что фразу, указывающую на путь, можно задать как переменную,
например del=/home/user/foler1/folder2/ и тогда уже оперировать $del
-
- Сообщения: 10044
- Зарегистрирован: 27 июн 2017, 13:36
- Решено: 129
- Откуда: Нижний Тагил
- Благодарил (а): 776 раз
- Поблагодарили: 1958 раз
- Контактная информация:
Удаление поворяющихся фраз через bash
madesta, ну как-то так
Код: Выделить всё
#! /bin/bash
i=1
while read LINE; do
q=$(echo $LINE | sed -e 's/\/path//')
sed -i -e "$i d" 2.txt
sed -i -e "$i i$q" 2.txt
i=$(($i+1))
done < 2.txt
sed -i -e "$ a$q" 2.txt
-
- Сообщения: 1650
- Зарегистрирован: 10 сен 2016, 10:16
- Решено: 19
- Откуда: Москва
- Благодарил (а): 697 раз
- Поблагодарили: 187 раз
- Контактная информация:
Удаление поворяющихся фраз через bash
https://itproffi.ru/komanda-sed-v-linux ... ie-zamena/
последний раздел про замену текста
последний раздел про замену текста
-
Автор темы - Сообщения: 2018
- Зарегистрирован: 11 июн 2017, 21:47
- Решено: 30
- Откуда: BY
- Благодарил (а): 79 раз
- Поблагодарили: 434 раза
- Контактная информация:
Удаление поворяющихся фраз через bash
Или я непроходимо туп, или что-то не срослось.darkfenix писал(а): ↑27 фев 2019, 21:19madesta, ну как-то такКод: Выделить всё
#! /bin/bash i=1 while read LINE; do q=$(echo $LINE | sed -e 's/\/path//') sed -i -e "$i d" 2.txt sed -i -e "$i i$q" 2.txt i=$(($i+1)) done < 2.txt sed -i -e "$ a$q" 2.txt
Пробую на файле /home/minter/.scripts/file.txt с содержанием:
Код: Выделить всё
/home/minter/Exchange/Curious/02.01
/home/minter/Exchange/Curious/02.01/Киллерфича Linux.pdf
/home/minter/Exchange/Curious/02.01/Иконки в Windows 98.pdf
/home/minter/Exchange/Curious/02.01/Windows 10-1.png
/home/minter/Exchange/Curious/02.01/Windows 10-3.png
/home/minter/Exchange/Curious/02.01/Bill Gates.pdf
/home/minter/Exchange/Curious/02.01/ФАС РФ.png
/home/minter/Exchange/Curious/02.01/Появилась информация о перспективном российском танке «Бурлан».mhtml
/home/minter/Exchange/Curious/02.01/Yandex-Mail.ru.png
/home/minter/Exchange/Curious/02.01/Windows 10-2.png
/home/minter/Exchange/Curious/02.01/Windows 7.png
/home/minter/Exchange/Curious/02.01/Macbook Pro.png
/home/minter/Exchange/Curious/02.01/Лица древних жителей Европы воссоздали по археологическим данным.mhtml
Код: Выделить всё
i=1
while read LINE; do
q=$(echo $LINE | sed -e 's/\/home/minter/Exchange/Curious//')
sed -i -e "$i d" /home/minter/.scripts/file.txt
sed -i -e "$i i$q" /home/minter/.scripts/file.txt
i=$(($i+1))
done < /home/minter/.scripts/file.txt
sed -i -e "$ a$q" /home/minter/.scripts/file.txt
Код: Выделить всё
/home/minter/Exchange/Curious/02.01/Киллерфича Linux.pdf
/home/minter/Exchange/Curious/02.01/Windows 10-1.png
/home/minter/Exchange/Curious/02.01/Bill Gates.pdf
/home/minter/Exchange/Curious/02.01/Появилась информация о перспективном российском танке «Бурлан».mhtml
/home/minter/Exchange/Curious/02.01/Windows 10-2.png
/home/minter/Exchange/Curious/02.01/Macbook Pro.png
Код: Выделить всё
/home/minter/.scripts/file1.sh
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 3: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 3: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 3: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 3: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 3: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 3: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 3: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 3: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 3: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 4: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 4: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 4: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 17: неизвестный модификатор к `s'
sed: -e выражение #1, символ 4: ожидалась \ после «a», «c» или «i»
sed: -e выражение #1, символ 3: ожидалась \ после «a», «c» или «i»
minter@H-3:~$
Код: Выделить всё
02.01
02.01/Киллерфича Linux.pdf
02.01/Иконки в Windows 98.pdf
02.01/Windows 10-1.png
02.01/Windows 10-3.png
02.01/Bill Gates.pdf
02.01/ФАС РФ.png
02.01/Появилась информация о перспективном российском танке «Бурлан».mhtml
02.01/Yandex-Mail.ru.png
02.01/Windows 10-2.png
02.01/Windows 7.png
02.01/Macbook Pro.png
02.01/Лица древних жителей Европы воссоздали по археологическим данным.mhtml
Последний раз редактировалось пользователем 1 madesta; всего редактировалось раз: 27
-
Автор темы - Сообщения: 2018
- Зарегистрирован: 11 июн 2017, 21:47
- Решено: 30
- Откуда: BY
- Благодарил (а): 79 раз
- Поблагодарили: 434 раза
- Контактная информация:
Удаление поворяющихся фраз через bash
Если следовать инструкции 's/старое_слово/новое_слово/',StarMAUGLI писал(а): ↑27 фев 2019, 21:46https://itproffi.ru/komanda-sed-v-linux ... ie-zamena/
последний раздел про замену текста
то получается:
sed 's//home/minter/Exchange/Curious///g' /home/minter/.scripts/file.txt
Выхлоп:
minter@H-3:~$ sed 's//home/minter/Exchange/Curious///g' /home/minter/.scripts/file.txt
sed: -e выражение #1, символ 11: неизвестный модификатор к `s'
minter@H-3:~$
После выполнения файл остался без изменений.
-
- Сообщения: 10044
- Зарегистрирован: 27 июн 2017, 13:36
- Решено: 129
- Откуда: Нижний Тагил
- Благодарил (а): 776 раз
- Поблагодарили: 1958 раз
- Контактная информация:
Удаление поворяющихся фраз через bash
Тут нужно понять принцип.
Если там где "старое_слово" есть
/
его надо экранировать что и сделано в моем примере скрипта /\/path/
- \
перед /path
.В твоем случае есть путь
/home/minter/Exchange/Curious/
в нем нужно экранировать все /
, т.е. должно получиться так \/home\/minter\/Exchange\/Curious\/
.А теперь следуем инструкции и получаем
Код: Выделить всё
sed -e 's/\/home\/minter\/Exchange\/Curious\//новое_слово/'
Код: Выделить всё
sed -e 's/\/home\/minter\/Exchange\/Curious\///'
В итоге имеем
-
Автор темы - Сообщения: 2018
- Зарегистрирован: 11 июн 2017, 21:47
- Решено: 30
- Откуда: BY
- Благодарил (а): 79 раз
- Поблагодарили: 434 раза
- Контактная информация:
Удаление поворяющихся фраз через bash
Жаль, что этого мне нигде из тех материалов, к которым обращался, вычитать не удалось.
Или читал не внимательно.
-
- Сообщения: 10015
- Зарегистрирован: 27 авг 2016, 22:57
- Решено: 215
- Откуда: НН
- Благодарил (а): 815 раз
- Поблагодарили: 3010 раз
- Контактная информация:
Удаление поворяющихся фраз через bash
Давай попробуем укоротить и ограничиться функциями самого баша, без вызова утилит
http://mywiki.wooledge.org/BashFAQ/100# ... of_strings
BashFAQ писал(а):The ## means "remove the largest possible matching string from the beginning of the variable's contents".
Код: Выделить всё
#! /bin/bash
str=/home/minter/Exchange/Curious # здесь укажем паттерн который надо выкинуть
while read LINE; do
echo "${LINE##*$str}"
done < listoflines.txt # входящий исходный файл
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей