Моя команда sed -
sed '/(.*:)/d' <<< 'abcd:bcde:cdeaf'
Должно вернуться,
bcde:cdeaf
(т.е.) все символы перед первым двоеточием в строке и само двоеточие должны быть удалены.
Но это ничего не убирает.
Моя путаница возникает в основном из-за,
1) Нужно ли экранировать паренов для сопоставления с образцом внутри регулярных выражений sed?
2) В любом случае (с выходом / без выхода) он не работает. Я старался,
sed -E '/\\(.*:\\)/d' <<< 'abcd:bcde'
sed 's/[^:]*://'
. И вы неd
eleting входной линии, кстати, вы изменяете его с помощьюs///
команды ubstitution. Вы должны заменить первый не двоеточие и двоеточие, которое следует за ним, вообще ни с чем.printf "%s\n" "${line#*:}"
...while read line
что получает$line
, вероятно,sed
должно быть предпочтительным.Ответы:
Первый
^
означает начало строки. Это[^:]
единственный способ, которым я знаю, как писать не двоеточие . Знак*
после двоеточия означает любое количество вещей прямо передо мной (в данном случае это не двоеточие). Наконец,:
выбирает двоеточие.Другими словами, выберите начало строки, любое количество вещей, которые не являются двоеточием, и первое двоеточие.
В
//g
средстве удаления каждый согласованный экземпляра.источник
^
привязывать ваш матч, за исключением того, что вы также добавляетеg
флаг lobal. может быть только одно первое появление шаблона, и поэтомуg
флаг lobal не удаляет все[^:]*:
шаблоны из линии, как это было бы, если бы вы не^
привязали его. вместо того, чтобы усложнять регулярное выражение двумя ненужными флагами, которые служат только для дисбаланса друг друга, вы можете просто пропустить их, что и было продемонстрировано в отредактированной версии этого ответа, прежде чем вы откатили его обратно. почему вы настаиваете на распространении плохой информации, я не знаю, но это делает это плохим ответом.sed
навыки. Я новичок,sed
и мне пока неудобно отклоняться от очень ограниченного синтаксиса, который я до сих пор изучал. Этоsed
(хех), я думаю, мой ответ решает проблему ОП, хотя это не оптимальный (т. Е. Ваш) ответ. Это Stack Exchange, а не Википедия, так что поправьте меня, если я ошибаюсь, но если вы знаете лучший ответ, вы должны опубликовать его, чтобы люди могли увидеть различные подходы и сравнить их. Пожалуйста, не включайте мой ответ в ваш ответ с помощью функции редактирования .Для работы со столбцами есть
cut
:тоже самое
И другая версия с
sed
(быстрее для больших данных):И довольно экзотично в
bash
или
или
источник
sed 's/[^:]*://'