Мне нужна команда sed, которая берет строку и удаляет все копии первого символа с самого начала (но не от остальной части строки).С учетом строки, как удалить пробег первого символа? (sed)
Например, AAABAC должен производить BAC, потому что первая буква A, поэтому мы удаляем весь пробег A с самого начала.
Моя первоначальная мысль была:
data=$(echo $data | sed 's/^.\+\(.*\)/\1/')
, но это не работает (выводит пустую строку). Если я заменил первый .
на определенный символ, он будет успешно работать только для этого символа, но я не могу правильно его подставить.
Я думаю, что .
соответствует первому символу, как я хочу, но тогда +
не помнит букву, которую я хочу, и продолжает принимать каждый символ до конца строки, так что в круглых скобках ничего нет и поэтому вся строка заменяется ничем. Как я могу сначала принять любой символ, но затем «заблокировать» этот символ для +
?
спасибо, это * почти * безупречный. Это не работает, когда есть только один из первых символов, но изменение + на a * решает это. – Caleb
Да, это правильно, ответьте на обновления. У меня сложилось впечатление, что вы не хотите удалять, если в начале нет повторов. – anubhava
Красиво сделано; в то время как '-E' часто делает команду' sed' работать как на Linux, так и на macOS, в этом случае это не так, потому что ERE на macOS не поддерживают обратные ссылки. Однако существует решение BRE, совместимое с POSIX: 'sed 's/^ \ (. \) \ 1 * //'' – mklement0