sed +, Как удалить отдельный символ после другого символа в строке sed

Как удалить отдельный символ после другого символа в строке sed

Например,

   LINE="ABCDE 123 |@ TEST"

Я хочу удалить символ, только если он существует после первого "|" символ в СТРОКЕ

команда sed проверит если: символ существует после "|", и если его истинное затем sed удалит символ

другой пример

    LINE="qwe 123 >|@ sdf g"  (before sed action)

    LINE=="qwe 123 >| sdf g"  (after sed action)

СПАСИБО

0
задан 28.06.2010, 12:23

3 ответа

 % echo "ABCDE 123 |@ TEST" | sed 's,|@,|,'

по существу то же как Ваш другой вопрос.

1
ответ дан 24.11.2019, 12:29

Вы, кажется, задаете много этих вопросов. Я предлагаю делать себя знакомыми с регулярным выражением, чтобы понять ответы лучше и предложить Ваши собственные решения. Регулярный-Expressions.info положительная сторона для запуска.

Для записи регулярного выражения, которое соответствует строкам, содержащим случай (т.е. В после КАНАЛА) Вы использовали бы

^.*?\|.*?@

Здесь ^ означает начало строки, .*? соответствия любые символы, но как можно меньше, @ литерал, и \| литерал |, просто оставленный, потому что он имеет особое значение в регулярных выражениях.

Для удаления Знака AT sign Вы даете sed команду заменять целое предложение всем кроме Знака AT sign. Чтобы сделать это, необходимо сохранить все, что Вы хотите сохранить. Регулярные выражения управляют этим с группами фиксации. Вы прибываете в

^(.*?\|.*?)@

sed управляют, чтобы Вы искали, наконец похож

sed -r 's/^(.*?|.*?)@/\1/'

Команда "s" обозначает замену, регулярное выражение, которое мы создали, между первой парой / (со скобками и обратной косой чертой, которой оставляют). Текст для замены соответствия \1 позади этого и обозначает содержание первой группы фиксации. Так как мы не получали В, который должен добиться цели.

Надежда помочь. Так как у меня нет sed здесь, это может или не может работать без модификаций.=)

0
ответ дан 24.11.2019, 12:29

Извините, не может в настоящее время комментировать решение Jens.

Шаблоны, обсужденные в решении Jens, не отвечают требованию для 'удаления символ только... после первого "|" символ'. Соответствующий шаблон был бы:

sed 's/\(^[^|]|\)@/\1/'

Это не изменяет строки, которые имеют дополнительный КАНАЛ перед КАНАЛОМ В последовательности.

0
ответ дан 24.11.2019, 12:29

Теги

Похожие вопросы