我想從這個輸出中提取的一年:基礎知識和sed
[email protected]:~/shell$ date
Mon Feb 8 21:57:00 CET 2010
[email protected]:~/shell$ date | cut -d' ' -f7
2010
[email protected]:~/shell$ date | awk '{print $6}'
2010
是否有任何其他的方法來得到相同的結果?使用也許grep,sed等? Merci!
我想從這個輸出中提取的一年:基礎知識和sed
[email protected]:~/shell$ date
Mon Feb 8 21:57:00 CET 2010
[email protected]:~/shell$ date | cut -d' ' -f7
2010
[email protected]:~/shell$ date | awk '{print $6}'
2010
是否有任何其他的方法來得到相同的結果?使用也許grep,sed等? Merci!
一些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/'
grep的意圖打印出相匹配的RE的整行。只需要打印出部分文件就會比較困難(最好)。
隨着SED,你可以使用匹配該行的其餘部分的RE,並用什麼替代它,讓你關心的部分。
好吧,讓GNU grep來打印出只有線的一部分並不困難。試試-o(--only-matching)標誌。 – 2010-02-09 15:04:12
@菲利普:謝謝 - 我沒有注意到那個標誌(儘管我可能已經看過幾百次的幫助文字了...) – 2010-02-09 15:08:50
如果你真的只是尋找從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
的grep發現您的文件的模式。但是,它不會修改你的文件。 sed找到模式以及修改文件。 cut是一個「剪切」文件中的列以顯示/(或文件)的工具。如果您的任務非常簡單,只需獲取一些列即可使用它。 awk在您的文件中找到模式,並且您可以通過創建另一個文件來對其進行修改。 awk可以做sed,grep,cut,所以你只需要一個工具就可以做任何事情。
針對大尺寸文件,使用grep找到sed的文本的操作模式和管AWK /。
對於您的示例,如果要獲取date
命令的年份,請使用date +%Y
。
各種方式獲得date
命令
$ date +%Y
2010
$ date | awk '{print $NF}'
2010
$ var=$(date)
$ set -- $var
$ eval echo \${${#}}
2010
最後的一年,你可以使用正則表達式像一些SED的例子,但我覺得最簡單的只是分割領域並獲得最後一個字段。不需要複雜的正則表達式。
使用GNU grep,您可以使用-o(--only-matching)僅顯示匹配模式的匹配行的一部分。下面的模式是四位連續一個Perl的正則表達式(-P,--perl-正則表達式):
$ date | grep -oP '\d{4}'
2010
非常酷菲利普,謝謝! – Zenet 2010-02-10 19:15:43
令人驚歎!謝謝丹尼斯 – Zenet 2010-02-10 19:16:23