Как я могу удалить весь текст после символа, в данном случае двоеточие (":"), в bash? Могу ли я удалить толстую кишку тоже? Я понятия не имею, как.
147
Пример мог бы быть полезным, но если я вас правильно понял, это сработало бы:
echo "Hello: world" | cut -f1 -d":"
Это преобразует "привет: мир" в "привет".
cut
работает, но у меня ответ Дениса лучше и гибче. Кто-нибудь знает, порождает ли он новый процесс, какcut
?basename
иcut
, см. Ответ Денниса нижеcut
Можно читать со стандартного ввода, поэтому лучше, особенно если у вас есть очень длинная строка, которую нужно обработать, например, содержимое файла.hello: world
. Это половина ответа.В Bash (и ksh, zsh, dash и т. Д.) Вы можете использовать расширение параметров, с помощью
%
которого удаляются символы из конца строки или#
удаляются символы из начала строки. Если вы используете один из этих символов, наименьшая соответствующая строка будет удалена. Если вы удвоите символ, самый длинный будет удален.источник
hello:world
станетhello:wo
с использованием${a%:*}
?"${a##*:}"
для получения толькоtomorrow
=)a='hello:world:of:tomorrow'; pattern=''^([^:]*:).*$'
; [[$ a = ~ $ pattern]]; echo "$ {BASH_REMATCH [1]}" `. Это соответствует только если есть двоеточие. Если вы хотите, чтобы это было необязательным, необходимо использовать другой шаблон. Объяснение регулярных выражений Bash (и регулярных выражений в целом) выходит за рамки этих комментариев. Вы можете найти другие вопросы, которые обсуждают это или опубликовать свои собственные.источник
источник
egrep
это grep с-E
. Здесь нет разницы с обычнымgrep
.-o
инструктирует grep распечатывать только ту часть строки, которая соответствует выражению.^
привязывает матч к началу строки.[^:]*
соответствует нулю или более символов, которые не являются:
символом.:
соответствует персонажу:
.Допустим, у вас есть путь с файлом в этом формате:
Теперь вам нужен только путь, который включает в себя четыре "/". Тип
и ваш вывод будет
Преимущество использования cut заключается в том, что вы также можете вырезать как самый верхний каталог, так и файл (в этом примере), так что если вы наберете
ваш вывод будет
Хотя вы можете сделать то же самое с другой стороны строки, в данном случае это не имеет особого смысла, как печатать
результаты в
В некоторых других случаях последний случай также может быть полезным. Имейте в виду, что в начале последнего вывода нет символа "/".
источник
обрезать все после последнего экземпляра ":"
и если вы хотите отбросить это последнее ":"
@ kp123: вы хотите заменить
:
на/
(где должно быть двоеточие sed\/
)источник