1. 用iconv指令解决utf8和gb18030编码间转换
Linux显示在Windows编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致。Linux下使用的编码是utf8,而Windows使用的是gb18030。
解决方案:
在终端中,进入到txt文件所在目录,使用命令符“iconv -f gb18030 -t utf8 1.txt -o 2.txt”把gb18030编码的1.txt转换成utf8的2.txt。
这样2.txt就成为Linux支持的编码。
2.cut命令
截去第1、2、3列,以一个空格为分隔符
cut -d' ' -f1,2,3 --complement test.log > test_cut.log
也可以用
cut -d' ' -f1-3 --complement test.log > test_cut.log
去掉–complement表示要留下哪几列,加上–complement表示要去掉哪几列
-b:根据字节选取内容。
-n:和-b连用,不区分多字节边界。
-c:根据字符选取内容。
-d:自定义分隔符,默认是\t。
-f:以字段为单位,一个字段即使一个单词,单词以-d选项设置的作为边界。
显示区域规则:
m:显示第m个内容。
m,n:显示第m和n个内容,下标从1开始。
m-n:显示m-n之间的所有内容。
m-:显示第m个到最后一个内容。
-n:显示第1个到n个之间的内容。
作者:马谦马谦马谦
链接:https://www.jianshu.com/p/c3ad464281e2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3.ln命令
功能:在文件之间建立链接(硬链接和软链接)
ln [选项] 源文件 目标文件
(1)建立软链接
ln -s 源文件 目标文件
这里面的“源文件”是文件真实的存储路径,而“目标文件”只是一个符号,如果想在一个文件夹里面链接另一个文件夹的文件,可以通过使用软链接来实现。
比如源文件为在a/b/c,想在d/e/文件夹下面链接c文件,且目标文件名为f,可以在文件夹d/e/下面使用如下命令:
ln -s a/b/c f
其中f文件是不需要事先创建的,它只是一个符号,随着软链接命令会自动创建,如果事先创建的话会出错的。
注:使用相对路径要好一些
4.后台运行命令
nohup bash 要运行的脚本 &>要运行的脚本.out &
nohup bash abc.sh &>abc.sh.out &
查看运行情况:
tail -f abc.sh.out
退出后台运行
ps
杀死一个一个进程
kill -9 进程号
查看运行的后台进程
jobs -l
5.awk获取文件的指定列
awk -F "\t" 'OFS="\t"{print $3,$4}' input_4 > input_2
其中input_4为:
c 0.988890131976 3563 d
分隔符为"\t"
以上的awk命令之后变成了:
3563 d
分隔符为"\t",放在input_2中
-F “\t"用来指定input_4中的分隔符,OFS=”\t"用来指定input_2中的分隔符,如果不指定分隔符的话会默认使用空格为分隔符。
6. wc
(1)查看文件行数
wc -l file_name
(2)查看文件字数
wc -w file_name
(3)查看文件Bytes数
wc -c file_name
(4)查看版本信息
wc -version
7. 查看文件指定行数内容(sed)
sed -n “开始行,结束行p” 文件名
输出第70行到第75行的内容
sed -n '70,75p' date.log
输出第6行 和 260到400行
sed -n '6p;260,400p; ' 文件名
8. 去掉文件前n行
去掉文件前5行
sed -i '1,5d' file.txt
要去掉前n行之需要把5换成n即可
9. sort
按照第二列的字段逆向排序
sort -n -k 2 -r out/file1.txt > out/sort_file1.txt
linux下的sort命令可以对文本的某些字段进行排序,而字段之间的分隔符默认是空格,如果想换成别的,则需要加参数-t:
sort -t "^A" -n -k 2 -r part1 > sort_part
但是对于tab分隔符,还是得稍微注意一下。比如下面的命令:
sort -t '\t' -k3,3n a.txt >a.sort
会报错:
sort: multi-character tab `\t'
这个不能按照tab分隔符进行字段排序,换成如下两种方式就可以了:
sort -t $'\t' -k3,3n a.txt>a.sort
sort -t'<ctrl>v<tab>' -k3,3n a.txt>a.sort
v代表先同时按下Ctrl和v键,然后松开,按下tab键。
将管道的输出按照第一列的字段进行排序
python a.py file2.txt | sort -n -k 1 > out/file2_out.txt
如果sort时占用的运行内存太大了,可以用-S来设置运行占用内存
# 如果是中文的话前面最好加上export LC_ALL=C
export LC_ALL=C
sort -S 5G file1.txt > file2.txt
如果sort操作的临时文件默认的存放路径满了,可以设定存放路径
# tmp文件夹可以自己建立
sort -T ./tmp -S 5G file1.txt > file2.txt
10. 比较两个目录中的文件 diff -rq
11.
cut -f1-8 replace.show |sort -t ' ' -k8n|vim -
12. 删除隐藏文件
问题:
在递归地删除文件夹时如果有隐藏文件的话系统会询问你要不要删除,而且对每一个小文件都会问一下,很烦。
使用ll -a
命令可以看到隐藏文件,然后使用rm -rf 隐藏文件名
即可删除隐藏文件。
13. vim常用命令之多行注释和多行删除
1.多行注释:
- 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;
- 在行首使用上下键选择需要注释的多行;
- 按下键盘(大写)“I”键,进入插入模式;
- 然后输入注释符(“//”、“#”等);
- 最后按下“Esc”键。 注:在按下esc键后,会稍等一会才会出现注释,不要着急~~时间很短的
2.删除多行注释:
- 首先按esc进入命令行模式下,按下Ctrl + v, 进入列模式;
- 选定要取消注释的多行;
- 按下“x”或者“d”. 注意:如果是“//”注释,那需要执行两次该操作,如果是“#”注释,一次即可
3.多行删除:
1.首先在命令模式下,输入“:set nu”显示行号;
2.通过行号确定你要删除的行;
3.命令输入“:32,65d”,回车键,32-65行就被删除了,很快捷吧
如果无意中删除错了,可以使用‘u’键恢复(命令模式下)
14. 设置vim的编码方式
vim ~/.vimrc
然后在~/.vimrc里面写入:
set encoding=utf-8
set fileencodings=utf-8,gb18030
15. sed替换分隔符
sed -i "s/\x01/\t/g" test.txt
等价于:
sed -i "s/^A/\t/g" test.txt
这里的s表示替换,g表示全局(globally)
16. 用pip装包时显示内存不足
是因为默认的tmp满了,可以自己建一个tmp,然后export
export TMPDIR=$HOME/tmp
17. 通过port找到正在使用这个port的运行pid
lsof -i :$prot
举例:
lsof -i :2008
18. 要通过进程ID(PID)获取正在运行进程的启动命令
cat /proc/PID/cmdline
举例:
cat /proc/12345/cmdline
19. 用awk获取文件的特定行
linux想要获取文件的第1列为"你好"和第3列为"other"的所有行:
awk '$1=="你好" && $3=="other"' file.txt
linux想要获取文件的第1列为"你好"和第3列包含"other"的所有行:
awk '$1=="你好" && $3 ~ /other/' file.txt
20. linux如何根据pid找到进程执行的路径
要找到Linux系统中正在运行的进程(服务)的执行路径,你可以使用/proc文件系统。每个正在运行的进程都有一个对应的目录在/proc下,目录名是进程的PID(进程标识符)。在这个目录下有很多有用的信息,包括该进程的可执行文件路径。
ls -l /proc/<PID>/exe