Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.
Модератор: Bizdelnick
apvs
Сообщения: 52
Сообщение
apvs » 12.12.2021 13:46
Есть текстовый файл с кучей строк типа
Код: Выделить всё
some text</p>
<p class="lin1">another text
some text</p>
<p class="lin1">Another text
Мне нужно заменить везде в файле </p>\n<p class="lin1"> на пробел, но только если another text начинается с буквы в нижнем регистре.
Как это сделать через sed/awk?
То есть результат должен быть такой:
Код: Выделить всё
some text another text
some text</p>
<p class="lin1">Another text
Представляю что-то типа sed 's/<\/p>\n<p class="lin1">/ /g', но вот как поставить условие проверки регистра первой буквы текста?
bars
Сообщения: 1007
ОС: BSD/LINUX
Сообщение
bars » 12.12.2021 16:34
Должен работать, но не работает хз прочему.
apvs
Сообщения: 52
Сообщение
apvs » 12.12.2021 16:55
Вместо "some text" и "another text" там в файле может быть любой текст, состоящий из латинских букв. То есть буквально "another" не надо вписывать, это просто для примера.
olecya
Сообщения: 904
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 12.12.2021 17:25
Для ГНУ сед:
Код: Выделить всё
sed -i 'N;/\<p>\n<p class="lin1">[a-z]/!{P;D};d' file
Если возможны не аски символы, то замените
[a-z] на
[[:lower:]]
Добавлено (17:27):
Что-то я напутала, систему настраиваю шрифт не привычный. Не правильно задачу поняла
Добавлено (17:40):
Тестируйте:
Код: Выделить всё
sed 'N;s/<\/p>\n<p class="lin1">\([[:lower:]]\)/ \1/;t;P;D' file
На всякий случай убрала опцию -i после тестов вставите
apvs
Сообщения: 52
Сообщение
apvs » 12.12.2021 17:47
Вот я пока до чего дошел для GNU sed
Код: Выделить всё
sed ':a;N;$!ba;s/<\/p>\n<p class="lin1">[a-z]/ /g' -i file
или кроссплатформенно
Код: Выделить всё
sed -e ':a' -e 'N' -e '$!ba' -e 's/<\/p>\n<p class="lin1">[a-z]/ /g' -i file
Получается почти как мне нужно, но при этом удаляет первую букву из "another text". Надо ее как-то сохранить. Как?
upd: Чтобы сохранить, надо в скобки поставить
Код: Выделить всё
sed ':a;N;$!ba;s/<\/p>\n<p class="lin1">\([a-z]\)/ \1/g' -i file
Добавлено (17:54):
olecya писала: ↑ 12.12.2021 17:25
Тестируйте:
Сработало. Спасибо.