Как удалить весь текст после символа в bash?

Как удалить весь текст после символа, в данном случае двоеточие ( ":" ), в bash? Могу ли я удалить двоеточие? Я понятия не имею, как это сделать.

Ответ 1

Пример может быть полезен, но если бы я понял вас правильно, это сработало бы:

cut -f1 -d":"

Это превратит "hello: world" в "привет".

Ответ 2

В Bash (и ksh, zsh, тире и т.д.) вы можете использовать расширение параметра с %, которое удалит символы из конца строки или #, которые будут удалять символы с начала Струна. Если вы используете один из этих символов, минимальная совпадающая строка будет удалена. Если вы удвоите символ, самый длинный будет удален.

$ a='hello:world'
$ b=${a%:*}
$ echo "$b"
hello
$ a='hello:world:of:tomorrow'
$ echo "${a%:*}"
hello:world:of
$ echo "${a%%:*}"
hello
$ echo "${a#*:}"
world:of:tomorrow
$ echo "${a##*:}"
tomorrow

Ответ 3

$ echo 'hello:world:again' |sed 's/:.*//'
hello

Ответ 4

egrep -o '^[^:]*:'

Ответ 5

Скажем, у вас есть путь с файлом в этом формате:

/dirA/dirB/dirC/filename.file

Теперь вам нужен только путь, который включает в себя четыре "/". Тип

$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-4 -d"/"

и ваш выход будет

/dirA/dirB/dirC

Преимущество использования разреза заключается в том, что вы также можете вырезать каталог uppest, а также файл (в этом примере), поэтому, если вы наберете

$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-3 -d"/"

ваш результат будет

/dirA/dirB

Хотя вы можете сделать то же самое с другой стороны строки, в этом случае это не будет иметь особого смысла при вводе

$ echo "/dirA/dirB/dirC/filename.file" | cut -f2-4 -d"/"

приводит к

dirA/dirB/dirC

В некоторых других случаях последний случай также может оказаться полезным. Имейте в виду, что в начале последнего вывода нет "/".