Как удалить весь текст после символа, в данном случае двоеточие ( ":" ), в 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
В некоторых других случаях последний случай также может оказаться полезным. Имейте в виду, что в начале последнего вывода нет "/".