Вы, кажется, задаете много этих вопросов. Я предлагаю ознакомиться с регулярными выражениями, чтобы лучше понять ответы и найти собственные решения. Regular-Expressions.info - хорошая отправная точка.
Чтобы написать регулярное выражение, которое соответствует строкам, содержащим ваш регистр (т. Е. AT после PIPE), вы должны использовать
^.*?\|.*?@
Здесь ^
означает начало .*?
соответствует любым символам, но как можно меньше, @
является литералом @, а \|
это литерал |, только что экранированный, потому что он имеет особое значение в регулярных выражениях.
Чтобы удалить знак AT, вы указываете sed заменить все предложение всем, кроме знака AT. Для этого вам нужно хранить все, что вы хотите сохранить. Регулярные выражения управляют этим с помощью групп захвата. Вы прибываете в
^(.*?\|.*?)@
Команда sed, которую вы ищете, наконец-то выглядит
sed -r 's/^(.*?|.*?)@/\1/'
Команда "s" обозначает замену, регулярное выражение, которое мы создали, находится между первой парой /
(с экранированием скобок и обратной косой черты). Текст, заменяющий совпадение, - это \1
за ним и обозначает содержимое первой группы захвата. Так как мы не захватили AT, это должно сработать.
Надеюсь, что помог. Так как у меня нет sed здесь, это может или не может работать без изменений. знак равно