• XSS.stack #1 – первый литературный журнал от юзеров форума

sed: как заменить все между нужными символами исключая строки с ключем

hoirslkdut

base
Пользователь
Регистрация
16.03.2022
Сообщения
74
Реакции
33
В общем есть такие строки:

aaaa@aaaa.aaa@aaaa
bbbb@asd@swde@bbbb
cccc@sdadwew@@cccc
ddd@ddddd.ddd.ddd@dddd

Нужно в строках между @ @ все удалить заменив на одну @, но только удалять в том случае если встретилась точка, в других случая не трогать.

Должно с этих 4х строк получится такое:

aaaa@aaaa
bbbb@asd@swde@bbbb
cccc@sdadwew@@cccc
ddd@dddd

Пока нашел способ просто удалять , вот так:

sed -e "s/@[^>]*@/@/g" 1 >2

Но нужно изменить чтобы не удалялась строка если между @ @ находится точка.

Спасибо
 
Новый вопрос, а как сделать так, чтобы удалялось только между теми @ @ где есть точка, а другое не трогало , ну типа :

eeee@11111@aaaaaaa.bbbbb@ddddddddddd

и должно получится:

eeee@11111@ddddddddddd

тоесть чтобы то где без точки между @ , не удалялось в строке в которой мы удаляем.
 
Последнее редактирование:
Код:
s/@[^@]*\.[^@]*@/@/g

Bash:
~$  echo 'eeee@1111@aaaaaaa.bbbbb@ddddddddddd' | sed -E "s/@[^@]*\.[^@]*@/@/g"
eeee@1111@ddddddddddd
~$  echo 'eeee@11.11@@aaaaaaa.bbbbb@ddddddddddd' | sed -E "s/@[^@]*\.[^@]*@/@/g"
eeee@@ddddddddddd

Если последовательность "@abc.def@" появляется в исходной строке не один раз, то, вероятно, потребуется прогнать всё через sed несколько раз. Что-то типа такого:

Bash:
~$  echo 'eeee@11.11@aaaaaaa.bbbbb@ddddddddddd' | sed -E "s/@[^@]*\.[^@]*@/@/g" | sed -E "s/@[^@]*\.[^@]*@/@/g"
eeee@ddddddddddd
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх