如何使用“剪切”来查找最后一个字段

如果不使用sedawk只能 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