我正试图从这个输出中提取年份:
sam@sam-laptop:~/shell$ date
Mon Feb 8 21:57:00 CET 2010
sam@sam-laptop:~/shell$ date | cut -d' ' -f7
2010
sam@sam-laptop:~/shell$ date | awk '{print $6}'
2010
还有其他方法可以获得相同的结果吗?使用也许grep,sed等? 谢谢!
答案 0 :(得分:10)
如果你真的只是从date
寻找当前年份,你可能会考虑直接运行它。
date +%Y
无需后期处理。 :)
更新:关于文字处理的评论(因为OP正在寻找那些)
cut
/ awk
/ sed
非常适合拆分文字。 grep
有助于找到你想要的行。
bash-specific regexp-like operators更加模糊(不太便携),但使用起来既快捷又有趣。
$ MYDATE=`date`
$ echo $MYDATE
Mon Feb 8 16:28:04 EST 2010
$ echo ${MYDATE##* }
2010
答案 1 :(得分:2)
一些sed
变体:
date | sed 's/.* //'
date | sed 's/.*\(....\)$/\1/'
date | sed 's/.*\(.\{4\}\)$/\1/'
date | sed -r 's/.*(.{4})$/\1/'
date | sed -r 's/.*([[:digit:]]{4})$/\1/'
答案 2 :(得分:1)
Grep旨在打印出与RE匹配的整行。让它只打印出一行的一部分将是相对困难的(充其量)。
使用sed,您可以使用与该行的其余部分匹配的RE,并将其替换为空,留下您关心的部分。
答案 3 :(得分:1)
您可能需要查看Perl。它在语法方面从sed
和awk
大量提升,是一种完整的编程语言,带有巨大的库(CPAN),可帮助您集成各种不同的系统。
当我发现我的简单awk
/ sed
解决方案必须扩展到最简单的情况之外时,我迁移到了Perl。
答案 4 :(得分:1)
grep在文件中查找模式。但是,它不会修改您的文件。 sed查找模式以及修改文件。 cut是一个“剪切”文件中的列以显示/(或文件)的工具。如果您的任务非常简单,只需获取一些列就可以使用它。 awk在您的文件中查找模式,您可以通过创建另一个文件来对其进行修改。 awk做的是sed,grep,cut,所以你只用一个工具就可以做任何事情。
对于大尺寸文件,使用grep查找模式和管道到awk / sed以处理文本。
对于您的示例,如果您想获得date
命令的年份,请使用date +%Y
。
获取date
命令的年份的各种方法
$ date +%Y
2010
$ date | awk '{print $NF}'
2010
$ var=$(date)
$ set -- $var
$ eval echo \${${#}}
2010
最后,您可以像使用某些sed示例一样使用正则表达式,但我发现最简单的方法就是拆分字段并获取最后一个字段。不需要复杂的正则表达式。
答案 5 :(得分:1)
使用GNU grep,您可以使用-o(--only-matching)仅显示匹配模式的匹配行的部分。模式下方是连续四位数的Perl正则表达式(-P, - perl-regexp):
$ date | grep -oP '\d{4}'
2010