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就是按照第一个空格执行空格替换为: