2010-02-08 66 views

回答

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/' 
+0

令人驚歎!謝謝丹尼斯 – Zenet 2010-02-10 19:16:23

1

grep的意圖打印出相匹配的RE的整行。只需要打印出部分文件就會比較困難(最好)。

隨着SED,你可以使用匹配該行的其餘部分的RE,並用什麼替代它,讓你關心的部分。

+0

好吧,讓GNU grep來打印出只有線的一部分並不困難。試試-o(--only-matching)標誌。 – 2010-02-09 15:04:12

+0

@菲利普:謝謝 - 我沒有注意到那個標誌(儘管我可能已經看過幾百次的幫助文字了...) – 2010-02-09 15:08:50

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 
+0

我只是在你發佈它時輸入了完全相同的答案。我只想補充一點,就是閱讀手冊頁以獲取更多格式化選項。事實上,我認爲nour現在有一個「授權」來閱讀手冊頁。 – mmrobins 2010-02-08 21:14:15

+0

謝謝:)我只是想學習bash命令的各種用法... – Zenet 2010-02-08 21:14:28

+2

'$()'比反引號更易於使用且不易出錯(考慮引號和轉義)。 – 2010-02-09 08:29:13

1

您可能想看看Perl。它在很大程度上提升從sedawk在語法方面,是一個完整的編程語言,具有巨大庫(CPAN),以幫助您與多種不同的系統結合起來。

當我發現我的簡單awk/sed解決方案必須擴展到最簡單的情況以外時,我才遷移到Perl。

+0

許多其他的shell腳本語言(這只是意味着你可以使用shebang行),因爲類似的原因。 – 2010-02-09 08:30:16

+0

這是非常真實的。我的偏好是Perl,但我準備接受這是歷史原因,今天我可以選擇紅寶石/蟒蛇等 – 2010-02-09 09:11:24

1

的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的例子,但我覺得最簡單的只是分割領域並獲得最後一個字段。不需要複雜的正則表達式。

1

使用GNU grep,您可以使用-o(--only-matching)僅顯示匹配模式的匹配行的一部分。下面的模式是四位連續一個Perl的正則表達式(-P,--perl-正則表達式):

$ date | grep -oP '\d{4}' 
2010 
+0

非常酷菲利普,謝謝! – Zenet 2010-02-10 19:15:43