Поиск и замена символов в файле через 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 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
madesta
Сообщения: 1988
Зарегистрирован: 11 июн 2017, 21:47
Решено: 28
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 425 раз
Контактная информация:

Поиск и замена символов в файле через bash

#1

24 июл 2022, 22:19

Условие задачи:
1. Убрать в текстовом файле из строк символы </p>
2. Убрать в текстовом файле из строк выражение <p> (до <p> 4 пробела).

Предприняты попытки:
1. Через sed
sed -i ‘s/</p>//g’ filename
sed -i ‘s/ <p>//g’ filename
В первом случае ошибка: /p: Нет такого файла или каталога
Во втором случае ошибка: p: Нет такого файла или каталога
2. Через awk
awk '{sub(/</p>/, ); print filename}' > filename1
Ошибка: недействительный символ '�' в выражении
awk '{sub(/ <p>/,); print filename}' > filename1
Ошибка: 1 - неверное число аргументов для sub

М.б. кто подскажет приемлемый способ через bash?
Нужно именно через bash, так как задача является второй частью скрипта. Первая часть отрабатывается нормально.

Текст для замены под спойлером.
В спойлере не отобразилось, но в оригинальном файле через xed перед символом <p> имеется 4 пробела.
Эх, не вовремя я курить бросил!</p>
<p>Затушил последнюю сигарету и почти сразу неприятности посыпались. Тем более, я классический попаданец. Ну, может, и не совсем, но сейчас попал знатно. К тем самым эльфийкам, оркам, магам и прочим обитателям Порубежья.</p>
<p>Из минусов:</p>
<p>На меня охотятся даже в собственном мире почти все трехбуквенные службы: МВД, ФСБ, ГРУ и даже НТВ! А один олигарх так и вовсе… Но то отдельная история!</p>
<p>Да еще и девушка изменяет (эх, печаль-тоска!) изощренно.</p>
<p>Патронов вот не так много осталось. Да и дизеля всего полканистры.</p>
<p>Но и плюсы имеются: </p>
<p>У меня остались связи, старый и дубовый, но надежный джип и полуавтоматический дробовик. Кроме того, я всегда могу вернуться. </p>
<p>Ах, да, еще и девушка изменяет (ура, свобода!)</p>
<p>Еще есть цель:</p>
<p>Спасти и доставить домой ушастую принцессу (а как же иначе?!), решившую погулять по улочкам простого российского городка. А если не получится — уничтожить.</p>
<p>Ничего не забыл?</p>
<p>Ну, конечно, мое любимое: если спать, так с королевой! Но не клинков же?!!

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

slant
Сообщения: 4469
Зарегистрирован: 21 июн 2017, 18:09
Решено: 95
Благодарил (а): 51 раз
Поблагодарили: 1966 раз
Контактная информация:

Поиск и замена символов в файле через bash

#2

24 июл 2022, 23:26

А экранировать спецсимволы в регулярном выражении кто будет? Разумеется оно так не работает. Подсказка - символ "/" нужно экранировать. Читайте документацию по regexp (регуляркам). И sed и awk ищут именно через них, а не тупо набор символов.
А вообще для написания регулярок с разбором и подсказками есть такой неплохой сайт: https://regex101.com

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

Автор темы
madesta
Сообщения: 1988
Зарегистрирован: 11 июн 2017, 21:47
Решено: 28
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 425 раз
Контактная информация:

Поиск и замена символов в файле через bash

#3

25 июл 2022, 04:02

Пришлось, конечно, помучиться (сразу пристрелить себя не решился :-D ), но озвученную свою проблему решил.

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

rogoznik
Сообщения: 10015
Зарегистрирован: 27 июн 2017, 13:36
Решено: 128
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1950 раз
Контактная информация:

Поиск и замена символов в файле через bash

#4

25 июл 2022, 15:26

madesta, как-то так

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

sed -i 's/\s\{4\}<p>|<\/p>//' filename
ИзображениеИзображение

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

slant
Сообщения: 4469
Зарегистрирован: 21 июн 2017, 18:09
Решено: 95
Благодарил (а): 51 раз
Поблагодарили: 1966 раз
Контактная информация:

Поиск и замена символов в файле через bash

#5

25 июл 2022, 16:27

rogoznik, Вторую часть можно записать короче и гораздо универсальней <\/*p>.
А в целом виде для этой задачи совсем корректно будет так: (\s{2,})*<\/*p>

Закрыто

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей