前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux入门004 | 重定向、管道和grep

linux入门004 | 重定向、管道和grep

作者头像
用户11172986
发布2024-06-20 19:21:43
700
发布2024-06-20 19:21:43
举报
文章被收录于专栏:气python风雨气python风雨

前言

经常打游戏的朋友都知道,掌握数据意味着掌握胜利 这在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的组合使用都能让你的操作更加游刃有余。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 基础重定向 >
      • 追加重定向 >>
        • 特定检索
          • 反向操作
            • 筛选文本特定行
              • 过滤并排序进程列表
                • 查找并保存特定文本信息
                相关产品与服务
                Elasticsearch Service
                腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档