数据操作
Linux探索之旅第三章笔记
- grep:筛选数据,可以配合正则表达式进行复杂的查找
用法:grep text file
,其中,text表示要查找的文本,file表示供查找的文件
常用参数:grep -i text file
(忽略大小写)
grep -n text file
(显示行号)
grep -v text file
(只显示文本不在的行)
grep -r text catalog
(在所有子目录和子文件中查找)
grep -E 正则表达式 file
(在所有子目录和子文件中查找)
常用的正则表达式的字符及其含义:
特殊字符 | 含义 |
---|---|
. | 匹配除 “\n” 之外的任何单个字符 |
^ | 行首(匹配输入字符串的开始位置) |
$ | 行尾(匹配输入字符串的结束位置) |
[] | 在中括号中的任意一个字符 |
? | 问号前面的元素出现零次或一次 |
* | 星号前面的元素可能出现零次,一次或多次 |
+ | 加号前面的元素必须出现一次以上(包含一次) |
一根竖线 | 逻辑或 |
() | 表达式的分组(表示范围和优先度) |
-
sort: 为文件排序
用法:sort file
(默认按照首字母的英文字典顺序排序,且不区分大小写,不修改file中的内容,排序结果显示在终端上)
常用参数:sort -o file_sort file
(将排序后的结果存储在file_sort中,原文件file的内容保持不变)
sort -r file
(倒序排序)
sort -R file
(随机排序)
sort -n file
(对数字排序,默认地,仅用sort命令的时候,是不区分首字符是否是数字的,因此还是按照1-9的顺序来排序。例如138会排在25前面,因为1排在2的前面) -
wc:文件的统计
用法:wc file(统计file中的单词数、行数、字节数、字符数)
返回值:行数 单词数 字节数 file
常用参数:wc -l file
(统计行数)
wc -w file
(统计单词数)
wc -c file
(统计字节数)
wc -m file
(统计字符数) -
uniq:删除文件中的重复内容
用法:uniq file
(同sort类似,uniq命令不会改变原文件的内容,只会把处理后的内容显示出来)
uniq repeat.txt unique.txt
(将uniq后的结果存储到unique.txt中,原文件repeat.txt保持不变)
常用参数:uniq -c repeat.txt
(统计重复的行数)
uniq -d repeat.txt
(只显示重复行的值) -
cut:剪切文件的一部分内容
常用参数:cut -c 2-4 name.txt
(只保留name.txt中每一行的第2至第4个字符)
-d参数:用于指定用什么分隔符(比如逗号,分号,双引号等等)
-f参数:表示剪切下用分隔符分隔的哪一块或哪几块区域
cut -d , -f 1 notes.csv
用,作为分隔符,剪切notes.csv文件的第一部分,输出的结果会显示在屏幕上 -
>:重定向到新文件
用法:cut -d , -f 1 notes.csv > students.txt
用,作为分隔符,剪切notes.csv文件的第一部分,将cut命令的结果重定向到students.txt文件中,若文件不存在,则创建该文件,如果该文件中有内容,重定向的内容会覆盖原来的内容 -
>>:重定向到文件末尾
用法:cut -d , -f 2 notes.csv >> students.txt
用,作为分隔符,剪切notes.csv文件的第二部分,将cut命令的结果重定向到students.txt文件中,若文件不存在,则创建该文件,如果该文件中有内容,重定向的内容会追加到文件末尾 -
stdin,stdout,stderr:标准输入,标准输出,标准错误输出
用一张图片来说明
文件描述符 | 名字 | 解释 |
---|---|---|
0 | stdin | 标准输入 |
1 | stdout | 标准输出 |
2 | stderr | 标准错误输出 |
- 2>:重定向标准错误输出到文件(覆盖)
用法:cat not_exist_file.csv > results.txt 2> errors.log
将标准输出重定向到results.txt文件中,将标准错误输出重定向到errors.log文件中
2>>:重定向标准错误输出到文件(追加)
2>&1:将标准输出和标准错误输出都重定向到一个地方
用法:cat not_exist_file.csv > results.txt 2>&1
(覆盖)
cat not_exist_file.csv >> results.txt 2>&1
(追加) - <:从文件中读取
用法:cat < notes.csv
cat命令接受的输入直接是notes.csv这个文件的内容,cat命令只负责将其内容打印。而打开文件并将文件内容传递给cat命令的工作则交给shell程序(也就是控制终端的程序)来完成
对比cat notes.csv
cat命令接受的输入是notes.csv这个文件名,那么它要先打开notes.csv文件,然后打印出文件内容 - <<:从键盘读取
用法:sort -n << END
对键盘输入的内容执行sort -n命令,键盘输入以END(也可以是其他任意字符)结束,sort的结果会显示在屏幕上
sort -n << END > numbers_sorted.txt 2>&1
对键盘输入的内容执行sort -n命令,键盘输入以END(也可以是其他任意字符)结束,sort的结果(标准输出和标准错误输出)重定向到numbers_sorted.txt中 - |:管道(上一个命令的输出作为下一个命令的输入)
用法:cut -d , -f 1 notes.csv | sort > sorted_names.txt
用,作为分隔符,剪切notes.csv文件的第一部分,输出的结果作为sort的输入,执行sort命令,将sort的结果重定向到sorted_names.txt中
sudo grep log -Ir /var/log | cut -d : -f 1 | sort | uniq
遍历/var/log这个目录及其子目录,列出所有包含log这个关键字的行。-I参数用于排除二进制文件。-r参数用于递归遍历。sudo命令是为了以root身份查找系统文件夹/var/log;从命令1的输出结果中只剪切出文件名那一列(由冒号分隔的第一个区域);将文件名的列以首字母的字典顺序进行排序;去掉重复的文件名 - w:都有谁,在做什么
输出内容:时间,运行时间,负载(从左到右1mins、5mins、15mins以内的平均负载),登录的用户列表(同who命令) - ps:进程的静态列表
输出内容:PID:进程号;TTY:进程运行所在的终端;TIME:进程运行了多久;CMD:产生这个进程的程序名
常用参数:ps -ef
列出所有进程;ps -efH
:以乔木状列出所有进程;ps -u 用户名
:列出此用户运行的进程 - top:进程的动态列表
- Ctrl + C:停止终端中正在运行的进程
- kill PID:结束进程号为PID的进程;killall 程序名:结束所有名为find的进程
- &符号:在后台运行进程
用法:命令 &
- 进程前后台转换
1.如果我们运行一个程序,默认情况下,它会成为一个前台运行的进程。我们可以按组合键Ctrl + C来销毁此进程。
2.我们也可以使此进程在后台运行。假如运行程序时就用&放在命令最后,那么进程就会在后台运行。
3.假如在进程运行起来后,按Ctrl + Z,则进程会转到后台,并且停止。此时如果运行bg命令,则进程重新运行,并继续在后台。
4.fg命令可以使进程转到前台,并且运行。 - at:延时执行一个程序
用法:at 17:12
在17点12分执行下面输入的命令,Ctrl + D结束输入;at 17:12 tomorrow
at 17:12 12/10/15
at now +10 minutes
- atq和atrm命令:列出和删除正在等待执行的at任务
每次我们用at命令指定延时执行的命令,at都会为其分配一个job编号,atq命令可以列出正等待执行的at任务,atrm命令可以删除正在等待执行的at任务,后接at任务的编号