shell技巧

一、利用xargs -I进行文件(只有一列)转置(列变行)

cat inputfile | xargs -I {} printf {}"\t"
#是将读取到的一行作为一个参数传递给后边的命令

 

二、删除当前目录下不包含关键词的文件

#如当前目录下有许多文件及文件夹,但有个含有.json的文件,我不想删除,只想删除不包含*.json的文件及文件夹
ls -I *.json #只列出不包含.json的文件及文件夹,注意I参数的使用
ls -I *.json | xargs -I {} rm -rf {}

 

三、对于匹配到关键词的前后行的操作

##打印出匹配到关键词的前一行和后一行

#sed
#We have a input file:
<< Flag
123343242
AAAAAAAA
343243243
BBBBBBBB
139883857
CCCCCCCC
395783749
DDDDDDDD
Flag

sed -n '/BB/{n;p}' input#打印出匹配到BB的下一行
#139883857
sed -n '/BB/{n;n;p}' input#打印出匹配到BB的下下一行
#CCCCCCCC

sed -n -e  '/BB/{n;p;n;p}' input#匹配到BB,打印下两行
#139883857
#CCCCCCCC

sed -n '/BB/{g;1!p;};h' input#匹配到BB,打印上一行
#343243243

#grep
grep -A1 'BB' input #-A after,下一行
#BBBBBBBB
#139883857

grep -B1 'BB' input #-B before,上一行
#343243243
#BBBBBBBB

grep -C1 'BB' input#-C上下行,当然其中的数字可以换成2,3,。。。
#343243243
#BBBBBBBB
#139883857

 

四、vi编辑文件时空格和tab的替换

 在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:

  set ts=4  (注:ts是tabstop的缩写,设TAB宽4个空格)

  set expandtab

 

 对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:

  TAB替换为空格: 

  :set ts=4
  :set expandtab
  :%retab!

 

   空格替换为TAB:

  :set ts=4

  :set noexpandtab

  :%retab!

 

五、查找空文件

find . -name "*".txt -type f -size 0c

 

六、匹配中文汉字

grep -P '[\p{Han}]' file_name

 

七、按某个空格执行替换命令

 某个文件有些行含有一个空格,有些行含有两个空格,有些行含有三个空格,如果想按照第一个空格执行替换命令

sed  's/ /:/1' file_input
# 不进行全局了,后面的/1就是按照第一个空格执行空格替换为:

 

  

 

posted @ 2018-11-28 18:28  1直在路上1  阅读(221)  评论(0编辑  收藏  举报