[工具与库]Linux命令速查-文本

1、标注输出/标准错误/标准输入

>> echo "I don't always test my code." "But when I do I do it in production"

>> printf "Even if you test the code for %d times, it could still fail at the %d-th time.\n" 100 101

>> printf "the usage of cpu is %.2f%%\n" 33.3333

printf类似C里面的printf,只是不用加括号,用空格分隔参数。echo会末尾输出换行,printf不会。

区分标准输出和标准错误

>> ls 1> ls.stdout 2> ls.stderr

同时输出

>> ls &> ls.stdalll

同时输出到屏幕

./run.sh 2>&1 | tee lxg.log

标准输入

>> rev # rev可以把输入左右颠倒

yitutech # 这是人工输入,需要回车

hcetutiy # 这是程序输出

(人工按 ctrl-D,程序结束。ctrl-D 在标准输入中意味着输入终止。

2、多命令组合

管道 | ,前者的输出作为后者的输入

>> echo yitutech | rev

hcetutiy

逻辑组合&&,前者成功了才会进入后者,||类似,只不过是前者失败了才会进入后者

[16:25:18] xiaoguang.li@Res-Ubuntu218: ~/temp

>> mkdir good && cd good

[16:33:15] xiaoguang.li@Res-Ubuntu218: ~/temp

>> mkdir good || echo "failed to create folder good"

mkdir: cannot create directory ‘good’: File exists

failed to create folder good

$(command)可以把命令输出嵌入到另一个命令中

[16:28:55] xiaoguang.li@Res-Ubuntu218: ~/temp/good

>> touch $(seq 1 3)

[16:29:17] xiaoguang.li@Res-Ubuntu218: ~/temp/good

>> ls

1  2  3  good

seq是生成一个序列,比如1到3

$(command)可用`command`替代,反引号,键盘上1左边那个

括号()可以组合多条命令

[16:29:22] xiaoguang.li@Res-Ubuntu218: ~/temp/good

>> (echo "first line"; echo "second line") > output.txt

[16:31:36] xiaoguang.li@Res-Ubuntu218: ~/temp/good

>> cat output.txt

first line

second line

3、文件系统

只保留文件名

[16:34:44] xiaoguang.li@Res-Ubuntu218: ~/temp

>> basename `pwd`

temp

[16:36:42] xiaoguang.li@Res-Ubuntu218: ~/temp

>> basename ~/temp/ls.stderr

ls.stderr

[16:36:57] xiaoguang.li@Res-Ubuntu218: ~/temp

>> basename '/home/xiaoguang.li/temp/ls.stdout'

ls.stdout

文件夹和分区大小

ncdu后出现统计页面,可以上下左右移动,按d直接删除文件夹,q退出,用来看哪个文件夹占用空间大很方便

用于重命名时,mvrename区别

mv只能单个文件重命名,rename功能更强大,支持多文件。

多文件重命名

rename 's/V130700300/V130720300/' *

 

linux下的文件操作——批量重命名

linux下的文件操作——批量重命名 - pangbangb - 博客园

4、读文件内容

head和tail

[17:00:23] xiaoguang.li@Res-Ubuntu218: ~/temp

>> head -n 1 ls.stdout

ls.stderr

[17:01:56] xiaoguang.li@Res-Ubuntu218: ~/temp

>> tail -n 1 ls.stdout

ls.stdout

[17:02:07] xiaoguang.li@Res-Ubuntu218: ~/temp

>> tail -f ls.stdout

ls.stderr

ls.stdout

^C

more和less,more是分页查看文件,less是升级版more,会进入类似vim的界面,支持搜索

diff和vimdiff,diff就是平铺查看两个文件区别,vimdiff有左右比较

:qa退出全部,就是vim命令后面加a

递归比较两个文件夹,-q是只列出不同的文件名,不列出内容,不带q就是列出内容;-r是递归;

diff -Nrq dir1/ dir2

wc统计行数、字符数,word count

wc -l 只统计行数

5、写文件内容

文本处理有个很齐全的教程

GitHub - learnbyexample/Command-line-text-processing: From finding text to search and replace, from sorting to beautifying text and more

cut按列切割矩阵

按冒号分隔,取第一段

grep xxx | cut -d : -f 1

cut命令_Linux cut命令:剪切文件中的数据

cut命令_Linux cut命令:剪切文件中的数据

sort排序行,按每行字典序,默认以空格作为分隔符,也有随机排序也就是打乱的功能

uniq相邻两行消除重复

uniq只会消除相邻两行,一般uniq前先sort,保证最后是不重复的

uniq -c,消除时统计行数,把行数放在前面

grep,-v反查,-i不区分大小写,-P正则表达式

grep -nr "\"ageMHA\" \: 4" output/rider.avi/trackItem/*.json | wc -l

sed对文件内容进行逐行修改

如字符串替换,s开头,用任意符号分割都可以,如图里的#、/、|,用后者替代前者

最后加g是全行替换,不加是替换第一个

Linux sed 命令 | 菜鸟教程

后面接文件名,如果想要改变原文件,加参数-i

sed -i 's#xxx#yyy#' zzz.list

ls -l / > root.txt && sed '/total/d' -i root.txt

支持正则表达式,下图是把紧接着两个数字的单词与后面的数字对调,final fantasy 15

用/d可以删除包含字符串的行,如图删掉了C++ is difficult那一行

sed -i 's/130700300/130720300/g' ./V130720300/*.json

头尾加符号

在每行的头添加字符,比如"HEAD",命令如下:

sed 's/^/HEAD&/g' test.file

在每行的行尾添加字符,比如“TAIL”,命令如下:

sed 's/$/&TAIL/g' test.file

一起加

sed '/./{s/^/HEAD&/;s/$/&TAIL/}' test.file

linux shell 用sed命令在文本的行尾或行首添加字符

linux shell 用sed命令在文本的行尾或行首添加字符 - aaronwxb - 博客园

只删除纯空行

sed '/^\s*$/d' file

删除纯空行和由空格组成的空行

sed '/^[  ]*$/d' file

awk对文本处理

下图秀一些操作,打印第一列和第三列,第一列求和,用cut也能实现,第一列求平均

awk打印列比cut强大,cut默认按tab分割,awk默认按tab或若干空格分隔

Linux awk 命令 | 菜鸟教程

去掉空行

awk 'NF' log1 > log2

shuf按行随机洗牌,-n 3指定输出3行,比shuf 4.tmp | head -n 3快

rev按字符反转,先倒过来,按/分割取第一列,再倒过去

tr字符替换

下图是创建每行1个数总共10个数的文本,再把换行符替换成加号,再把最后一个加号换成等号,喂给bc(计算器)进行求和

5、常用工具

wget下载Leo一篇论文,-O指定路径

xargs把从标准输入读到的每行或每若干行,都执行相同动作

比如之前常用的删除.o文件

>> find . -name "*.tmp" | xargs rm

>> ls

games.txt  good  leo_paper.pdf  ls.stdall  ls.stdout

jq可以用来解析json

cat *.json | jq '.key_face.body_feature.feature_data'

 

parallel用于并行执行多个相近的命令

convert图像处理工具

history查看历史命令

time统计一个命令运行的时间

随机数

➜  temp echo $((RANDOM))

27022

6、文件名通配符

可以用[]进行匹配

sed -i 's/\"highest\": [0-9].[0-9],/\"highest\": 4.0,/g' branch_[0-3]_[0-3].conf

linux文件名匹配——通配符使用

linux文件名匹配——通配符使用 - CS408 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值