2014-02-10 81 views
-1

我試圖使用「tr」命令,並使用它的-d刪除選項。我的目的是按照訪問日期的順序重新排列文件列表。Linux/Unix的tr命令,奇怪的行爲

我有以下內容的文件orderedFile:

Access: 2014-02-09 21:35:36.642598731 -0700 0) accessedfiles.cpp 
Access: 2014-02-10 14:24:01.527811265 -0700 1) accessedfiles.sh 
Access: 2014-02-10 14:24:03.563811320 -0700 2) onlyFilesListFile 
Access: 2014-02-10 14:24:03.563811320 -0700 3) orderedFile 
Access: 2014-02-10 14:23:37.623810616 -0700 4) properlyOrdered 
Access: 2014-02-10 14:23:37.543810614 -0700 5) smallestToLargest 
Access: 2014-02-09 21:35:36.642598731 -0700 6) strace.txt 
Access: 2014-02-09 21:35:36.638598730 -0700 7) sum.cpp 
Access: 2014-02-10 13:24:54.415715076 -0700 8) test 
Access: 2014-02-09 21:35:36.638598730 -0700 9) testFile 

我然後使用命令TR -d「訪問:」削減該接入部分關閉每一行的(這是一個bash腳本完成在每一行),我得到一個新的文件下面的輸出properlyOrdered:

2014-02-09213536.642598731-07000)adfil.pp 
2014-02-10142401.527811265-07001)adfil.h 
2014-02-10142403.563811320-07002)onlyFilLitFil 
2014-02-10142403.563811320-07003)ordrdFil 
2014-02-10142337.623810616-07004)proprlyOrdrd 
2014-02-10142337.543810614-07005)malltToLargt 
2014-02-09213536.642598731-07006)tra.txt 
2014-02-09213536.638598730-07007)um.pp 
2014-02-10132454.415715076-07008)tt 
2014-02-09213536.638598730-07009)ttFil 

所以我現在有時間擺在最前頭,東至使用上的grep,但文件名是全然的時髦和壓縮。任何想法爲什麼?現在他們很難與全名匹配。

+0

提示:[shellcheck](http://www.shellcheck.net)會自動指出腳本和命令中的幾個常見問題,包括這一個。 –

回答

3

這是錯誤的命令實際上是:

tr -d 'Access: ' 

,因爲它會刪除字母A,C,E,S每次出現:

您需要sed

sed 's/^ *Access: //' 
2

使用sed

sed -e 's/^Access: //' orderedFile 

如果你只是想文件名:

sed -e 's/^.*) //' orderedFile 

從聯機幫助頁tr,你可以看到:

-d, --delete 
       delete characters in SET1, do not translate 

所以你做了刪除字符Aces,:(空格),這就是爲什麼你得到亂碼的文件名。

1

命令tr -d 'Access:'不僅僅刪除完整的單詞「Access:」,它將刪除出現在字符串「Access:」中的每個字母的每個實例。參見man trhttp://linux.die.net/man/1/tr)。

刪除完整單詞的好工具是sed;你可以嘗試以下方法:

sed 's/^Access: //' orderedFile > properlyOrdered 
1

AWK替代:

awk -F'^Access: ' '$NF=$NF' OFS='' file 
0

TR不適合這個,怎麼樣切?

cut -c 9- < file 
0

既然你已經選擇代表日期的格式有字母排序是相同的日期/時間排序的質量 - 你可以在不需要砍線,

sort -k2,3 <filename> 
文件排序

(使用字段2和3排序)。