2014-02-10 48 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排序)。