Shell·常用命令
xargs命令
对前面查询结果进行其他命令处理
-p 输出结果需要手动确认
-d 指定分割符
-n 指定每次输出几个-d分割的字符
echo '11@22@33' | xargs -p -d '@' echo
echo '11@22@33@44@55@66@77@88@99@00' | xargs -d '@' -n 3 echo
查询并显示当前路径下文件信息
find ./ -name '*.txt' |xargs ls -l
查询排序
df -h 显示磁盘使用情况
du -s 显示目录使用情况
du -s /usr/* | sort -rn 从大到小
du -s /usr/* | sort -n 从小到大
du -s /usr/* | sort -rn | head 前面的10个
du -s /usr/* | sort -rn | tail 后面的10个
du -k /home/linux 以KB为单位
du -m /home/linux 以MB为单位
du -g /home/linux 以GB为单位
可加一个-h,表示"--human-readable",单位是k或者M ,结果列出后,更清楚。
1.按时间排序
#升序
find ./ -name *.txt |xargs ls -lta
ls -lta
#降序
find ./ -name *.txt |xargs ls -ltr
ls -ltr
2.按大小排序
ls -l //显示详细信息
ls -i //查看indoes号
ls -la //显示目录下全部的子目录或者文件(包括隐藏的)
ls -lta //按时间排序
ls -ld //查看目录属性
#从大到小排序
find ./ -name *.txt |xargs ls -Sl
ls -Sl
#从小到大
find ./ -name *.txt |xargs ls -Slr
ls -Slr
替换文本中的某些字符
Linux中Cp936 就是gb2312
- 在文本中显示编码分割符
printf "%b" "\u7f" >> a.txt
- 文本字符替换 ctrl+v+i 是制表符tab 键
sed -i "s/ /hua/g" dd.txt
- iconv转换编码
iconv -c -f latin1 -t utf-8 demo.txt > demo.txt
- 文本新增列指定值
awk '{print $0,",新增的列"}' h1.csv >h2.csv
- 文本替换空格
不需要加引号
sed -i "s/ /'替换空格值'/g" dd.txt
enconv 转换文件编码,比如要将一个GBK编码的文件转换成UTF-8编码,操作如下
enconv -L zh_CN -x UTF-8 filename
iconv 转换,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如将一个UTF-8 编码的文件转换成GBK编码
iconv -f GBK -t UTF-8 file1 -o file2
查看文本编码
file demo.txt
vim demo.txt
:set fileencoding
#显示
fileencoding=latin1
#查询终端编码集
locale
修改终端编码:
export LC_ALL=en_US.iso88591
修改终端编码还可以在 /etc/profile 设置。
设置文本格式:
1查看文本格式 esc键 然后 输入 :set fileencoding
2以某种格式查看文本数据 :set enc=GBK2312
3修改文本的格式:
当buftype=nofile时,不能保存文件,只有当buftype=空时,才可以保存
:verbose set buftype #查看buftype 设置
:setlocal buftype=
:set fileencoding=utf-8
:set ff=unix(或者:set fileformat=unix)
:wq!
sed
用sed的i\命令在第一行前面插入即可,加上 -i 选项直接操作文件。
sed -i '1i\要添加的内容' filename
查看插入第一行是否成功
sed -n '1,1p' filename
删除第一个字符或前几个字符
sed 's/.//' test.txt
sed 's/.\{5\}//' test.txt
sed 's/.$//' test.txt ## 删除最后一个字符
sed 's/.4//' test.txt ##删除特定字符及其前的字符
sed 's/4.//' test.txt ##删除特定字符及其后的字符
awk
nr 相当于rowkey行号
NF表示当前行有多少个段
FNR是文件中的行数,和NR还是有点小小区别的
$0表示整行
$n表示第n个分段
打印所有列与行
awk '{print $0}' test.txt
指定分割符打印文本
awk -F "|" '{print FS}' test.txt
循环创建目录文件
awk 'BEGIN { for(i=0;i<5; i++) print "DD"i".TXT";}'|xargs mkdir
打印第一行与第三行
awk '{print $1, $3}' test.txt
显示行号与字段列的值
awk '{printf("%d:%s\n", NR, FILENAME)}' test.txt
将显示的行号与字段列的值输出成文本
awk '{printf("%s%d\n", FILENAME, NR)}' test.txt | xargs touch
FNR查询两个文本只显示当前文本的行数,NR两个文本的行数会一直累加排序显示
awk '{printf("%d:%d:%s\n", NR, FNR, FILENAME)}' test.txt test_bak.txt
NF表示当前行有多少个段
awk '{print NF}' test.txt
echo "good good study" | awk '{print NF}'
指定分割符打印文本
awk -F "|" '{print FS}' test.txt
当条件为真时打印文本
awk '1' test.txt
当条件为假时不打印文本
awk '1<=0' test.txt
查询包含Cat的行
awk '/Cat/' test.txt
sed -n "/Cat/"p test.txt
打印第一列等于Cat的行
awk '$1=="Cat"' test.txt
打印文本的第二列
awk '{print $2}' test.txt
awk '{printf("%d\n", $2)}' test.txt
取文本的第二行到第四行
awk '{if(NR>=2 && NR<=4) print $0}' test.txt
sed -n "2,4"p test.txt
打印文本以t结尾的行
awk '/t$/' test.txt
打印文本以C开始的行
awk '/^C/' test.txt
打印文本不包含Cat的行
awk '!/Cat/' test.txt
计算字符串长度
awk '{print length}' test.txt
echo "good good study" | awk '{print length}'
正则表达式-取文本中包含100的行并且第四行大于60
awk '/100/ && $4 > 60' test.txt