ls 排序

首先我们通过man 来看看 ls其中有几项;

  • -S     sort by file size : 按大小降序

–sort=WORD

sort by WORD instead of name: none -U, extension -X, size -S, time -t, version -v

–time=WORD

with -l, show time as WORD instead of modification time: atime -u, access -u, use -u, ctime -c, or status -c; use specified time as sort key if –sort=time

–time-style=STYLE

with -l, show times using style STYLE: full-iso, long-iso, iso, locale, +FORMAT. FORMAT is interpreted like ‘date’; if FORMAT is FORMAT1<newline>FORMAT2, FORMAT1

applies to non-recent files and FORMAT2 to recent files; if STYLE is prefixed with ‘posix-’, STYLE takes effect only outside the POSIX locale

  • -t     sort by modification time 按时间升序
  • -u     with -lt: sort by, and show, access time with -l: show access time and sort by name otherwise: sort by access time  以文件上次被访问的时间排序。
  • -U     do not sort; list entries in directory order 不做排序
  • -v     natural sort of (version) numbers within text 
  • -X     sort alphabetically by entry extension 

ls -lS    按大小降序

ls -l | sort -n -k5     按大小升序

ls -lrt   按时间降序

ls -lnt    按时间升序

ls -l | sort -k9    按文件名升序(这是ls的默认输出方式)

ls -lr 按文件名降序

ls -l | sort -rk9   按文件名降序

附:

ls对当前目录和文件大小排序

du -s * | sort -nr

只对当前目录排序,并用直观的大小显示出来

for i in $(ls -l |grep ‘^d’ |du -s * |sort -nr|awk ‘{print $2}’);do du -sh $i;done

Vi 中文乱码

Vi ~/.vimrc 添加以下内容

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936

set termencoding=utf-8

set encoding=utf-8

命令行中打开文件后执行命令

<< EOF 是执行一命令,命令从<<EOF行开始到EOF出现的地方结束。例如:

ftp -n << EOF

open $host 21

user $user $password

cd $remote_dir

lcd $local_dir

get $file_name

bye

EOF

<< – EOF 与 << EOF 只有细微的差别(在菜单式命令中每行的开头可以不必顶格),下面这段代码使用<<EOF会出错,必须使用<<-EOF

ftp -n <<- EOF

        open $host 21

        user $user $password

        cd $remote_dir

        lcd $local_dir

        get $file_name

        bye

        EOF

EOF并不是唯一的,例如可以这样:

ftp -n <<- !

        open $host 21

        user $user $password

        cd $remote_dir

        lcd $local_dir

        get $file_name

   

   

sed变量 引号

在使用sed对日志或者其它文本进行parse的过程当中,有时候我们需要引用外部变量的值,

或者获取一个shell命令执行的结果,以便达到更加可观的输出结果。这里介绍如何做到。

sed中使用变量替换

1.sed命令使用双引号的情况下,使用$var直接引用

$ echo|sed “s/^/$RANDOM.rmvb_/g” 

29328.rmvb_ 

# 上面例子引用了一个环境变量$RANDOM的值

2.sed命令使用单引号的情况下,使用'”$var”‘引用

类似,我们可以看到

$ echo|sed ‘s/^/'”$RANDOM”‘.rmvb_/g’ 

31338.rmvb_

sed中执行外部命令

1.sed命令使用单引号的情况下使用’`shell command`’或者’$(shell command)’引用命令执行的结果

还是以上面案例分析,例子如下

$ echo|sed ‘s/^/’`echo $RANDOM`’.rmvb_/g’ 

8063.rmvb_ 

# 上面的例子使用了旧式的命令替换,也可以采用新式的命令替换方法,如下

$ echo|sed ‘s/^/’$(echo $RANDOM)’.rmvb_/g’ 

18554.rmvb_ 

# 下面例子取用当前日期作为结果的一部分,如下

$ echo|sed ‘s/^/’$(date +”%Y%m%d”)’.rmvb_/g’ 

20120108.rmvb_ 

2.sed命令使用双引号的情况下直接`shell command`或者$(shell command)引用命令执行的结果 

类似的,双引号的情况,如下

$ echo|sed “s/^/$(date +”%Y%m%d”).rmvb_/g” 

20120108.rmvb_ 

# 使用环境变量$RANDOM以及旧式命令替换的例子

$ echo|sed “s/^/`echo $RANDOM`.rmvb_/g” 

4988.rmvb_

总结

在sed语句里面,变量替换或者执行shell命令,双引号比单引号少绕一些弯子

awk 设置输入输出分隔符

awk  F=”\t” ‘{OFS=”:”;print $1,$2}’

最后如果只写print 相当于print $0,意思是输出这些文本,未使用分隔符,“,”表示使用分隔符,使用OFS定义的分隔符