如何删除bash中的字符后的所有文本?
如何删除一个字符后面的所有文本,本例中是冒号(“:”),在bash中? 我也可以去除结肠吗? 我不知道如何。
一个例子可能是有用的,但如果我正确地理解了你,这将工作:
cut -f1 -d":"
这会将“hello:world”转换成“hello”。
在Bash(和ksh,zsh,破折号等)中,可以使用参数扩展%
,这将从string的末尾或#
中删除字符,从string的开头删除字符。 如果您使用这些字符中的单个字符,则最小的匹配string将被删除。 如果你将angular色加倍,最长的将被删除。
$ 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
$ echo 'hello:world:again' |sed 's/:.*//' hello
egrep -o '^[^:]*:'
假设你有一个文件格式的path:
/dirA/dirB/dirC/filename.file
现在你只需要包含四个“/”的path。 types
$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-4 -d"/"
和你的输出将是
/dirA/dirB/dirC
使用剪切的优点是,你也可以剪切最高的目录以及文件(在这个例子中),所以如果你input
$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-3 -d"/"
你的输出将是
/dirA/dirB
虽然你可以从string的另一边做同样的事情,但是在这种情况下,打字就没有什么意义了
$ echo "/dirA/dirB/dirC/filename.file" | cut -f2-4 -d"/"
结果是
dirA/dirB/dirC
在其他一些情况下,最后一种情况也可能有所帮助。 请注意,在上次输出开始时没有“/”。