不使用sed或awk,只cut,当字段的数量未知或随每一行变化时,我如何得到最后一个字段?
当前回答
这是唯一可能的解决方案,只使用切割:
回声“s.t.r.i.n.g。”| cut -d'。- f2 - [repeat_following_part_forever_or_until_out_of_memory:] | cut -d'。- f2 -
使用此解决方案,字段的数量确实可以是未知的,并且随时变化。但是,由于行长不能超过LINE_MAX字符或字段(包括新行字符),那么任意数量的字段永远不能作为该解决方案的实际条件。
是的,一个非常愚蠢的解决方案,但我认为这是唯一符合标准的解决方案。
其他回答
你可以尝试这样做:
echo 'maps.google.com' | rev | cut -d'.' -f 1 | rev
解释
Rev将maps.google.com颠倒为moc.elgoog.spam Cut使用点(即“。”)作为分隔符,并选择第一个字段,即moc 最后,我们再次反向得到com
我意识到,如果我们只是确保后面的分隔符存在,它就可以工作。在我的例子中,我有逗号和空格分隔符。我在结尾加了一个空格;
$ ans="a, b"
$ ans+=" "; echo ${ans} | tr ',' ' ' | tr -s ' ' | cut -d' ' -f2
b
下面实现一个朋友的建议
#!/bin/bash
rcut(){
nu="$( echo $1 | cut -d"$DELIM" -f 2- )"
if [ "$nu" != "$1" ]
then
rcut "$nu"
else
echo "$nu"
fi
}
$ export DELIM=.
$ rcut a.b.c.d
d
如果你有一个名为fillist .txt的文件,它是一个列表路径,如下所示: c: / dir1 dir2 / file1.h c: / dir1 dir2 / dir3 / file2.h
然后你可以这样做: Rev fillist .txt | cut -d"/" -f1 | Rev
没有awk ? 但是用awk很简单:
echo 'maps.google.com' | awk -F. '{print $NF}'
AWK是一个更强大的工具,可以放在你的口袋里。 -F if用于字段分隔符 NF是字段的数量(也表示最后一个字段的索引)
推荐文章
- 在Unix中,我可以在一个目录中运行'make'而不首先cd'到该目录吗?
- Github权限被拒绝:ssh添加代理没有身份
- 在bash中使用正则表达式进行搜索和替换
- 如何从命令行重置Jenkins安全设置?
- 如何查看Linux共享库正在导出的函数列表?
- 在Docker Alpine容器中启动一个shell
- 如何在Python中实现常见的bash习语?
- 如何通过docker运行传递参数到Shell脚本
- Bash“if [false];”返回true而不是false——为什么?
- 在shell脚本中使用$()而不是反引号的好处是什么?
- 快速unix命令显示文件中间的特定行?
- fork(), vfork(), exec()和clone()的区别
- 检查bash变量是否等于0
- 在tmux中保持窗口名称固定
- 只使用md5sum获取哈希值(没有文件名)