前言
经常打游戏的朋友都知道,掌握数据意味着掌握胜利 这在linux也是相同的。 本章,我们将探讨重定向 (> 和 >>) 的奥秘、管道 (|) 的魔力, 以及 grep这把文本处理的瑞士军刀,让你的数据操控更上层楼
1. 重定向:数据流动的方向
基础重定向 >
我来解说一下上期制作文本的语句
tail获取文本的最后三十行内容
使用 > 将文本内容传递到new.txt
In [1]:
代码语言:javascript复制
代码语言:javascript复制!tail -n 15 /home/mw/input/meteva7050/nmc_met_tutorial-master/nmc_met_tutorial-master/meteva/input/meb/m1.txt > new.txt
代码语言:javascript复制
In [3]:
代码语言:javascript复制
代码语言:javascript复制!cat -n /home/mw/project/new.txt
代码语言:javascript复制
代码语言:javascript复制 1 12625 19.95 49.28 857 1 9 140 1 9999 0 8 1 0.5 35 90 200 15 8 10 16.7 9999 9999 9999 9999
2 12670 21.77 49.70 331 1 6 80 2 184 0 1 1 9999 9999 60 9999 17 22 2 19.6 25 12 9999 9999
3 12690 22.33 49.45 422 1 5 90 2 186 0 1 1 9999 9999 40 9999 18 22 2 18.9 23 12 9999 9999
4 12695 22.77 49.80 280 1 9999 0 1 192 0 0 0 9999 9999 9999 9999 18 9999 100 19.3 9999 9999 9999 9999
5 64910 9.70 4.02 9 1 9 0 0 144 9999 6 6 15 39 90 300 23 8 60 24.0 9999 9999 9999 9999
6 01023 18.53 69.05 76 1 9999 0 0 169 0 0 0 9999 9999 9999 9999 17 9999 0 17.3 9999 9999 9999 9999
7 01425 6.50 58.50 66 1 9999 320 1 184 1 0 0 2 9999 9999 9999 14 9999 0 14.9 9999 9999 9999 9999
8 01424 6.35 59.63 2 1 9999 0 0 176 1 0 0 26 9999 9999 9999 15 9999 0 16.8 9999 9999 9999 9999
9 01150 14.95 66.48 251 1 9999 100 1 9999 9999 0 0 0.8 9999 9999 9999 16 9999 0 16.1 9999 9999 9999 9999
10 01488 10.82 60.12 170 1 9999 350 1 9999 9999 0 0 8 9999 9999 9999 16 9999 0 16.9 9999 9999 9999 9999
11 48679 103.67 1.63 40 1 9 320 0 118 9999 6 2 9999 39 40 300 24 10 61 24.4 24 18 9999 9999
12 16364 16.37 38.76 996 1 9999 240 2 9999 0 0 0 9999 9999 9999 9999 17 9999 0 18.4 9999 9999 9999 9999
13 16415 14.87 38.58 45 1 9999 180 0 137 0 0 0 9999 9999 9999 9999 23 9999 0 24.1 9999 9999 9999 9999
14 16081 9.26 45.46 107 1 9999 0 0 146 0 0 0 9999 9999 9999 9999 24 9999 0 26.7 9999 9999 9999 9999
15 16314 16.66 40.68 496 1 9999 10 5 150 0 0 0 9999 9999 9999 9999 17 9999 0 22.9 9999 9999 9999 9999
追加重定向 >>
但若你想在文件末尾追加内容而非覆盖,那么使用>> :
In [4]:
代码语言:javascript复制
代码语言:javascript复制!echo "Hello world" >> /home/mw/project/new.txt
代码语言:javascript复制
In [5]:
代码语言:javascript复制
代码语言:javascript复制!cat -n /home/mw/project/new.txt
代码语言:javascript复制
代码语言:javascript复制 1 12625 19.95 49.28 857 1 9 140 1 9999 0 8 1 0.5 35 90 200 15 8 10 16.7 9999 9999 9999 9999
2 12670 21.77 49.70 331 1 6 80 2 184 0 1 1 9999 9999 60 9999 17 22 2 19.6 25 12 9999 9999
3 12690 22.33 49.45 422 1 5 90 2 186 0 1 1 9999 9999 40 9999 18 22 2 18.9 23 12 9999 9999
4 12695 22.77 49.80 280 1 9999 0 1 192 0 0 0 9999 9999 9999 9999 18 9999 100 19.3 9999 9999 9999 9999
5 64910 9.70 4.02 9 1 9 0 0 144 9999 6 6 15 39 90 300 23 8 60 24.0 9999 9999 9999 9999
6 01023 18.53 69.05 76 1 9999 0 0 169 0 0 0 9999 9999 9999 9999 17 9999 0 17.3 9999 9999 9999 9999
7 01425 6.50 58.50 66 1 9999 320 1 184 1 0 0 2 9999 9999 9999 14 9999 0 14.9 9999 9999 9999 9999
8 01424 6.35 59.63 2 1 9999 0 0 176 1 0 0 26 9999 9999 9999 15 9999 0 16.8 9999 9999 9999 9999
9 01150 14.95 66.48 251 1 9999 100 1 9999 9999 0 0 0.8 9999 9999 9999 16 9999 0 16.1 9999 9999 9999 9999
10 01488 10.82 60.12 170 1 9999 350 1 9999 9999 0 0 8 9999 9999 9999 16 9999 0 16.9 9999 9999 9999 9999
11 48679 103.67 1.63 40 1 9 320 0 118 9999 6 2 9999 39 40 300 24 10 61 24.4 24 18 9999 9999
12 16364 16.37 38.76 996 1 9999 240 2 9999 0 0 0 9999 9999 9999 9999 17 9999 0 18.4 9999 9999 9999 9999
13 16415 14.87 38.58 45 1 9999 180 0 137 0 0 0 9999 9999 9999 9999 23 9999 0 24.1 9999 9999 9999 9999
14 16081 9.26 45.46 107 1 9999 0 0 146 0 0 0 9999 9999 9999 9999 24 9999 0 26.7 9999 9999 9999 9999
15 16314 16.66 40.68 496 1 9999 10 5 150 0 0 0 9999 9999 9999 9999 17 9999 0 22.9 9999 9999 9999 9999
16 Hello world
Hello world
2. 管道:一定是特别的缘分
管道,以 | 符号相连,能将一个命令的输出直接作为另一个命令的输入,实现命令的串联操作
In [8]:
代码语言:javascript复制
代码语言:javascript复制ls -l /home/mw/input/meteva7050/nmc_met_tutorial-master/nmc_met_tutorial-master/meteva/input/meb | grep txt
代码语言:javascript复制
代码语言:javascript复制-rw-r--r-- 1 mw root 513788 May 21 08:51 m1.txt
-rw-r--r-- 1 mw root 28586 May 21 08:51 m2.txt
-rw-r--r-- 1 mw root 19834 May 21 08:51 m3.txt
-rw-r--r-- 1 mw root 822120 May 21 08:51 m4.txt
-rw-r--r-- 1 mw root 100100 May 21 08:51 m8.txt
-rw-r--r-- 1 mw root 33943 May 21 08:51 rain01.m3.txt
-rw-r--r-- 1 mw root 749845 May 21 08:51 sevp.txt
以上是实现显示文件夹下所有的txt文件
你问grep是什么?别急,看下面
3. grep : 大浪淘沙
grep(Global Regular Expression Print,全局正则表达式打印)是Linux及Unix系统中一个强大的文本搜索工具,用于在文件中按照指定的模式(可以是简单的字符串或者复杂的正则表达式)进行搜索,并将匹配到的行打印出来
特定检索
文本内检索有9999的行
In [10]:
代码语言:javascript复制
代码语言:javascript复制!grep "9999" /home/mw/project/new.txt
代码语言:javascript复制
代码语言:javascript复制12625 19.95 49.28 857 1 9 140 1 9999 0 8 1 0.5 35 90 200 15 8 10 16.7 9999 9999 9999 9999
12670 21.77 49.70 331 1 6 80 2 184 0 1 1 9999 9999 60 9999 17 22 2 19.6 25 12 9999 9999
12690 22.33 49.45 422 1 5 90 2 186 0 1 1 9999 9999 40 9999 18 22 2 18.9 23 12 9999 9999
12695 22.77 49.80 280 1 9999 0 1 192 0 0 0 9999 9999 9999 9999 18 9999 100 19.3 9999 9999 9999 9999
64910 9.70 4.02 9 1 9 0 0 144 9999 6 6 15 39 90 300 23 8 60 24.0 9999 9999 9999 9999
01023 18.53 69.05 76 1 9999 0 0 169 0 0 0 9999 9999 9999 9999 17 9999 0 17.3 9999 9999 9999 9999
01425 6.50 58.50 66 1 9999 320 1 184 1 0 0 2 9999 9999 9999 14 9999 0 14.9 9999 9999 9999 9999
01424 6.35 59.63 2 1 9999 0 0 176 1 0 0 26 9999 9999 9999 15 9999 0 16.8 9999 9999 9999 9999
01150 14.95 66.48 251 1 9999 100 1 9999 9999 0 0 0.8 9999 9999 9999 16 9999 0 16.1 9999 9999 9999 9999
01488 10.82 60.12 170 1 9999 350 1 9999 9999 0 0 8 9999 9999 9999 16 9999 0 16.9 9999 9999 9999 9999
48679 103.67 1.63 40 1 9 320 0 118 9999 6 2 9999 39 40 300 24 10 61 24.4 24 18 9999 9999
16364 16.37 38.76 996 1 9999 240 2 9999 0 0 0 9999 9999 9999 9999 17 9999 0 18.4 9999 9999 9999 9999
16415 14.87 38.58 45 1 9999 180 0 137 0 0 0 9999 9999 9999 9999 23 9999 0 24.1 9999 9999 9999 9999
16081 9.26 45.46 107 1 9999 0 0 146 0 0 0 9999 9999 9999 9999 24 9999 0 26.7 9999 9999 9999 9999
16314 16.66 40.68 496 1 9999 10 5 150 0 0 0 9999 9999 9999 9999 17 9999 0 22.9 9999 9999 9999 9999
反向操作
文本内检索没有9999的行
In [13]:
代码语言:javascript复制
代码语言:javascript复制!grep -v "9999" /home/mw/project/new.txt
代码语言:javascript复制
代码语言:javascript复制Hello world
4. 组合技:打出华丽combo
当然,我们学了以上指令,特别是管道符号,这让我们能手搓组合技能,帅气地达到目的
筛选文本特定行
比如查看文本倒数十五行内有9999的内容
In [17]:
代码语言:javascript复制
代码语言:javascript复制!tail -n 15 /home/mw/input/meteva7050/nmc_met_tutorial-master/nmc_met_tutorial-master/meteva/input/meb/m1.txt | grep "9999"
代码语言:javascript复制
代码语言:javascript复制12625 19.95 49.28 857 1 9 140 1 9999 0 8 1 0.5 35 90 200 15 8 10 16.7 9999 9999 9999 9999
12670 21.77 49.70 331 1 6 80 2 184 0 1 1 9999 9999 60 9999 17 22 2 19.6 25 12 9999 9999
12690 22.33 49.45 422 1 5 90 2 186 0 1 1 9999 9999 40 9999 18 22 2 18.9 23 12 9999 9999
12695 22.77 49.80 280 1 9999 0 1 192 0 0 0 9999 9999 9999 9999 18 9999 100 19.3 9999 9999 9999 9999
64910 9.70 4.02 9 1 9 0 0 144 9999 6 6 15 39 90 300 23 8 60 24.0 9999 9999 9999 9999
01023 18.53 69.05 76 1 9999 0 0 169 0 0 0 9999 9999 9999 9999 17 9999 0 17.3 9999 9999 9999 9999
01425 6.50 58.50 66 1 9999 320 1 184 1 0 0 2 9999 9999 9999 14 9999 0 14.9 9999 9999 9999 9999
01424 6.35 59.63 2 1 9999 0 0 176 1 0 0 26 9999 9999 9999 15 9999 0 16.8 9999 9999 9999 9999
01150 14.95 66.48 251 1 9999 100 1 9999 9999 0 0 0.8 9999 9999 9999 16 9999 0 16.1 9999 9999 9999 9999
01488 10.82 60.12 170 1 9999 350 1 9999 9999 0 0 8 9999 9999 9999 16 9999 0 16.9 9999 9999 9999 9999
48679 103.67 1.63 40 1 9 320 0 118 9999 6 2 9999 39 40 300 24 10 61 24.4 24 18 9999 9999
16364 16.37 38.76 996 1 9999 240 2 9999 0 0 0 9999 9999 9999 9999 17 9999 0 18.4 9999 9999 9999 9999
16415 14.87 38.58 45 1 9999 180 0 137 0 0 0 9999 9999 9999 9999 23 9999 0 24.1 9999 9999 9999 9999
16081 9.26 45.46 107 1 9999 0 0 146 0 0 0 9999 9999 9999 9999 24 9999 0 26.7 9999 9999 9999 9999
16314 16.66 40.68 496 1 9999 10 5 150 0 0 0 9999 9999 9999 9999 17 9999 0 22.9 9999 9999 9999 9999
过滤并排序进程列表
如果你想查看所有与Python相关的正在运行的进程,并按内存使用量排序
In [ ]:
代码语言:javascript复制
In [18]:
代码语言:javascript复制
代码语言:javascript复制!ps aux | grep '[p]ython' | sort -k4nr
代码语言:javascript复制
代码语言:javascript复制mw 1 0.1 0.6 348464 53644 ? Ssl 08:36 0:01 /opt/conda/bin/python /opt/conda/bin/jupyter-kernelgateway --log-level='WARN' --KernelGatewayApp.ip=0.0.0.0 --KernelGatewayApp.base_url=source/default/user/620dbd752e0e510017d2f245/label/ten.nj.sa3/lab/664c5d16d5aec9396de5408d --KernelGatewayApp.port=8889 --KernelGatewayApp.allow_origin='*' --JupyerWebsocketPersonality.list_kernels=True
mw 53 0.0 0.6 577496 48744 ? Ssl 08:36 0:00 /opt/conda/bin/python -m ipykernel_launcher -f /home/mw/.local/share/jupyter/runtime/kernel-3d390ee0-0b96-4b51-9491-51342574d02b.json
查找并保存特定文本信息
检索带有“01”的行并重定向到新的文本文件
In [21]:
代码语言:javascript复制
代码语言:javascript复制cat /home/mw/project/new.txt | grep "01" > newnew.txt
代码语言:javascript复制
In [22]:
代码语言:javascript复制
代码语言:javascript复制cat /home/mw/project/newnew.txt
代码语言:javascript复制
代码语言:javascript复制01023 18.53 69.05 76 1 9999 0 0 169 0 0 0 9999 9999 9999 9999 17 9999 0 17.3 9999 9999 9999 9999
01425 6.50 58.50 66 1 9999 320 1 184 1 0 0 2 9999 9999 9999 14 9999 0 14.9 9999 9999 9999 9999
01424 6.35 59.63 2 1 9999 0 0 176 1 0 0 26 9999 9999 9999 15 9999 0 16.8 9999 9999 9999 9999
01150 14.95 66.48 251 1 9999 100 1 9999 9999 0 0 0.8 9999 9999 9999 16 9999 0 16.1 9999 9999 9999 9999
01488 10.82 60.12 170 1 9999 350 1 9999 9999 0 0 8 9999 9999 9999 16 9999 0 16.9 9999 9999 9999 9999
小结
在Linux学习的旅途中,掌握重定向、管道和grep
命令是迈向高效操作和自动化处理的关键一步。本课内容回顾了这些基础而强大的工具,它们构成了处理文本数据和自动化脚本的核心能力。
重定向:重定向允许你改变命令的标准输入与输出,从而灵活地处理数据流。
- 标准输出重定向 (
>
):覆盖目标文件内容,例如ls > fileList.txt
将目录列表保存为文件。 - 追加重定向 (
>>
):在目标文件末尾追加内容,适合累积日志或数据,如echo "New entry" >> diary.txt
。
管道:管道(|
)作为数据的传输通道,连接两个命令,使前者命令的输出直接成为后者的输入,极大提升了命令的组合性和灵活性。例如,ls | grep ".pdf"
只列出当前目录下的PDF文件。
grep:作为文本搜索的利器,grep
凭借其正则表达式的能力,能够在文件或标准输入中查找并显示包含特定模式的行。结合选项,如 -i
(忽略大小写)、-v
(反向匹配)、-r
(递归搜索目录),grep
几乎能满足所有文本搜索需求。
通过这些概念的学习与实践,你已解锁了在Linux环境中高效处理文本、过滤信息、自动化日志分析等多种技能。无论是日常管理、编程调试,还是数据分析,重定向、管道和grep
的组合使用都能让你的操作更加游刃有余。