如何使用“剪切”来查找最后一个字段
如果不使用sed
或awk
, 只能 cut
,当字段数量未知或每行更改时,如何获取最后一个字段?
你可以尝试这样的事情:
echo 'maps.google.com' | rev | cut -d'.' -f 1 | rev
说明
- maps.google.com的反向将是
moc.elgoog.spam
-
cut
使用点作为分隔符,并select第一个字段,这是moc
- 最后,我们再次反转(感谢提醒,@tom)获得
com
使用参数扩展。 这比任何外部命令,包括cut
(或grep
)都要高效得多。
data=foo,bar,baz,qux last=${data##*,}
有关bash中的本地string操作的介绍,请参阅BashFAQ#100 。
这是不可能的使用只是cut
。 这是一个使用grep
的方法:
grep -o '[^,]*$'
replace其他分隔符的逗号。
有多种方式。 你也可以使用它。
echo "Your string here"| tr ' ' '\n' | tail -n1 > here
显然,tr命令的空格input应该用您需要的分隔符replace。
这是唯一可能的解决scheme:
回声“string”| 切“-d”。 -f2- [repeat_following_part_forever_or_until_out_of_memory:] | 切“-d”。 -f2-
使用这种解决scheme,字段的数量确实可能是未知数,并且会随时变化。 但是,由于行长度不能超过LINE_MAX字符或字段(包括换行符),因此任意数量的字段都不能成为此解决scheme的真实条件。
是的,这是一个非常愚蠢的解决scheme,但是唯一符合我认为的标准的解决scheme。
如果您有一个名为filelist.txt的文件,它是一个列表path,如下所示:c:/dir1/dir2/file1.h c:/dir1/dir2/dir3/file2.h
那么你可以这样做:rev filelist.txt | 剪下-d“/”-f1 | 转
下面介绍一位朋友的build议
#!/bin/bash rcut(){ nu="$( echo $1 | cut -d"$DELIM" -f 2- )" if [ "$nu" != "$1" ] then rcut "$nu" else echo $nu fi } $ export DELIM=. $ rcut abcd d