Синтаксис удаления неверен. Чтобы удалить в СЭД вам нужно сделать:
sed '(separator) [pattern to delete](separator)d'
Так, например:
sed -e '/regex/d' infile
Это для удаления целых строк в целом. То, что вы хотите сделать, вместо того, чтобы это сохранить некоторую часть линии, поэтому вам нужно захватить и заменить:
sed -e 's/regex-to-drop\(regex-to-keep\)/\1/g' input-file
«s» для замены и «г» является для глобальных и \(\)
является что захвачено, а \1
- это то место, где я хочу захватить вещь. Если бы я имел ряд захваченных пунктов,
\(something\)\(something_else\)
Я мог бы воспроизвести их с другим характером между ними, просто помещая следующее в замещающей части SED команды:
\1 ;; \2
Это будет производить: something ;; something_else
и вообще будет выглядеть так:
sed -e 's/\(something\)\(something_else\)/\1 ;; \2/g' input-file
в вашем случае, это выглядит, как вы хотите, чтобы все бросить перед двоеточием:
sed -e 's/^.*:\(.*\)$/\1/g' input-file
Сноска к вышесказанному как это было предложено @fedorqui:
Сед использует стандартные регулярки обозначение для обозначения начала и конца строки, так что «^» относится к началу строки и «$» относится к концу строки. Таким образом, полное объяснение выше выглядит следующим образом:
's/^.*:
Все от начала линии до двоеточия («S» означает, что мы устанавливаем команду «замените»).
Тогда:
\(.*\)$/
CAPTURE все до конца строки, и
/\1/g'
Заменитель ЦЕЛЫЙ линия с захваченного пункта. Сделайте это глобально (для всего файла).
Использование регулярных выражений, вероятно, лучший способ. Это регулярное выражение соответствует 99,99% адреса электронной почты: /^ (([^ <>() [\] \\.,;: \ S @ \ "] + (\. [^ <>() [\] \ \,;:... \ s @ \ "] +) *) | (\" + \ ")) @ ((\ [[0-9] {1,3} \ [0-9] {1, 3} \ [0-9] {1,3} \ [0-9] {1,3} \]) |.. (. ([A-Za-Z \ -0-9] + \) + [ a-zA-Z] {2,})) $/ – Alban
@ Албан Спасибо! Но мой вопрос не в том, что касается адреса электронной почты. Я пытаюсь понять, как использовать 'sed', а также понять, почему моя команда выше не работает. –
Это делает это в sed: 'sed 's /.*: \ (. \)/\ 1/g''. У меня недостаточно знаний языка, чтобы указать, что плохого в вашем коде. – fedorqui