Answers:
举个例子也许有用,但是如果我对你的理解正确的话,那就可以了:
echo "Hello: world" | cut -f1 -d":"
这会将“ hello:world”转换为“ hello”。
basename
和)更好cut
,请参见下面的丹尼斯答案
cut
可以从stdin读取,因此最好在需要处理很长的字符串(例如文件内容)的情况下使用。
hello: world
。这是一半的答案。
在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
hello:world
将变成的特定字符串之后删除2个字符?hello:wo
${a%:*}
"${a##*:}"
仅获得tomorrow
=)
a='hello:world:of:tomorrow'; pattern=''^([^:]*:).*$'
; [[$ a =〜$ pattern]]; 回显“ $ {BASH_REMATCH [1]}”`。仅当有冒号时才匹配。如果希望它是可选的,则必须使用其他模式。Bash正则表达式(和一般正则表达式)的解释超出了这些注释的范围。您可以找到讨论此问题的其他问题或发表您自己的问题。
假设您有一个具有以下格式文件的路径:
/dirA/dirB/dirC/filename.file
现在,您只需要包含四个“ /”的路径。类型
$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-4 -d"/"
您的输出将是
/dirA/dirB/dirC
使用cut的好处是您还可以剪切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
在其他一些情况下,最后一种情况也可能会有所帮助。请注意,最后一个输出的开头没有“ /”。
cut
可以,但是我丹尼斯的答案更好,更灵活。有谁知道它是否产生了像这样的新进程cut
?