Linux 命令行学习:数据流控制、文本处理、文件管理与自动化脚本 (第二天)

news/2024/10/31 12:16:10/

目标:掌握更多命令行技巧和文本处理工具。

1. 管道和重定向

(1)输入输出重定向

  • 输出重定向 (>):将命令的输出写入到文件中,如果文件存在,则覆盖。

演示 :

  • 输入重定向(<:将文件的内容作为命令的输入。

演示1:-w :计算output.txt 文件中的单词数

演示2:-l (统计 output.txt 文件中的行数)

  • 追加重定向 (>>):将命令的输出追加到文件末尾,不会覆盖文件内容。

演示:

(2)管道 (|)

管道将一个命令的输出作为另一个命令的输入,实现命令链的连接。

演示 :在 output.txt 中查找包含 "Hello" 的行

2.文本处理工具

(1)grep:文本搜索工具

  • 基本用法:grep <pattern> <file>

  • 常用选项

    • -i:忽略大小写
    • -n:显示匹配的行号
    • -v:显示不匹配的行

演示1 :搜索 output.txt 文件中包含 "again" 的行

演示2 :-i : 搜索 output.txt 文件中包含 "Hello" 的行,忽略大小写

 

演示3 :-n :显示匹配的行号

演示4 :-v :显示不匹配的行

(2) sed:流编辑器

  • 替换文本sed 's/old/new/' <file>

  • 常用选项

    • -i:直接修改文件内容
    • g:全局替换

演示 1:将 output.txt 中的 "again" 替换为 "AGAIN",仅显示结果,不修改文件

        注意 :output.txt 文件没有发生变化!

演示2 : -i :将 output.txt 中所有 "again" 替换为 "AGAIN" 并保存

(3) awk:文本处理工具

  • 基本用法awk '{print $1}' <file>,按列处理文本。

演示 1 :输出 output.txt 文件中每行的第1和第3列

演示2 :仅输出第3列值大于50的行的第1和第3列

3.文件查找和管理

(3) find:查找文件

  • 基本用法:find <path> -name <pattern>

  • 常用选项

    • -type f:查找文件
    • -type d:查找目录
    • -size:按文件大小查找

演示1 : 在 /home/user 目录下查找所有 .txt 文件

演示2 :查找 /home/user 目录下大于1MB的文件

演示3 :/home/user 目录下,查找所有子目录

该命令会列出 /home/user 目录及其子目录中所有的目录名称。

演示4 :查找名称为 parent1 的目录:

演示5 :查找包含“grand”字样的目录

(4) locate:快速查找文件

  • 使用 locate 查找文件,需要先更新数据库:

演示 :查找所有包含 "parent1" 的文件路径

4. 压缩和解压缩

(1)tar:打包和解包

  • 打包文件tar -cvf <archive.tar> <file/dir>

  • 解包文件tar -xvf <archive.tar>

演示1:将 /home/user/parent1 目录打包为 parent11.tar

演示2 :使用 tar -tf parent11.tar 查看打包文件的内容

演示3 : 解包 parent.tar 文件

(2)gzipgunzip

  • 压缩文件gzip <file>

演示 1: 压缩 archive.tar,生成 archive.tar.gz 并查看

演示 2:使用 tar -tf 查看 .tar.gz 文件内容

由于 parent11.tar.gz 是一个 .tar 文件经过 gzip 压缩后的产物,你可以使用 tar -tf 直接查看其中的内容,而不需要解压文件:

  • 解压文件gunzip <file.gz>

演示2 :使用 gunzip 解压了 parent11.tar.gz 文件 并使用 tar -tf 命令查看parent11.tar

(3)zipunzip

  • 压缩文件zip <archive.zip> <file>

演示 :将 file1 和 file2 压缩为 File.zip

  • 解压文件unzip <archive.zip>

演示 : 解压 File.zip 文件

PS :因为我这里当前路径下已经有 file1.txt 和 file2.txt 了,所以在我执行 unzip File.zip 命令后,系统提示是否要替换 file1.txtfile2.txt。我这里选择了 y(yes)替换, unzip 将压缩包中的文件解压并覆盖当前目录中已有的 file1.txtfile2.txt 文件。

5. 基础的 Shell 脚本

(1)编写简单的 Shell 脚本

Shell 脚本通常以 .sh 为后缀,第一行包含 #!/bin/bash 表示使用 Bash 解释器。

  • 示例脚本

演示1 :

1.1 创建文件 script.sh

1.2 nano 编辑器中输入以下内容:

  #!/bin/bash

  echo "Hello, World!"

 

  #!/bin/bash 指定了脚本使用 Bash 解释器。

  echo "Hello, World!" 会输出 “Hello, World!”。

1.3 nano 中,按 Ctrl + O 保存文件,按 Enter 确认 。

1.4 然后回车并按 Ctrl + X 退出编译器。

1.5 现在,文件 script.sh 已经存在,可以运行 chmod +x 来赋予执行权限:

1.6  赋予执行权限后,可以直接运行脚本:

(2)变量

  • 定义变量:

2.1 使用 nano 编辑文件:

2.2 使用变量:

nano 中,按 Ctrl + O 保存文件,按 Enter 确认 。

然后回车并按 Ctrl + X 退出编译器。

2.3 运行脚本:

PS:

确保脚本有执行权限(如果之前没有执行过此操作):chmod +x script.sh

(3)条件语句(if)

  • 基本格式

演示1 : 使用 nano 编辑文件并输入

解释

  • read -p "Enter a number: " num 提示用户输入一个数字,并将其存储在 num 变量中。
  • if [ $num -gt 10 ];:检查 num 是否大于 10。
  • else:如果 num 不大于 10,则执行这一部分的代码。
  • fi:结束条件语句。

PS: “$num” 的两边,一定要有空格!

演示2 : 输出示例

(4)循环

  • for 循环

演示1 : 使用 nano 编辑文件并输入

解释

  • for i in 1 2 3 4 5; 定义循环,变量 i 依次取 1 到 5 的值。
  • do ... done 包含了循环体的代码,echo "Number: $i" 输出当前的 i 值。

演示2 : 输出示例

  • while 循环
演示1 :使用 nano 编辑文件并输入

解释

  • count=1 初始化变量 count 为 1。
  • while [ $count -le 5 ];:当 count 小于或等于 5 时,执行循环体中的代码。
  • ((count++)):将 count 增加 1。
  • do ... done 包含了循环体的代码,echo "Count: $count" 输出当前的 count 值。

演示2 : 输出示例


http://www.ppmy.cn/news/1543336.html

相关文章

打造厨艺交流平台:Spring Boot开发全攻略

2 相关技术 2.1 Spring Boot框架简介 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Sprin…

便捷之选:微信小程序驱动的停车场管理系统

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

YARN集群优化:专家不告诉你的事

标签概念 YARN中,可以通过给节点打标签(Node Labels)来实现物理隔离。每个节点可以关联一个或多个标签,每个标签代表了节点的某种特性或分组。在提交应用程序时,可以指定应用程序需要运行在具有特定标签的节点上,从而实现不同应用在集群节点间的物理隔离。 操作步骤 具体步骤…

海外媒体发稿:如何打造媒体发稿策略

新闻媒体的发稿推广策略对于提升品牌知名度、吸引流量以及增加收入非常重要。本文将介绍一套在21天内打造爆款新闻媒体发稿推广策略的方法。 第一天至第七天&#xff1a;明确目标和定位 在这个阶段&#xff0c;你需要明确你的目标和定位&#xff0c;以便为你的新闻媒体建立一个…

yarn 下载安装、下载依赖、通过 vscode 运行服务(Windows11)

目录 yarn工具前置要求&#xff1a;安装node.js并配置好国内镜像源下载安装下载依赖特别的&#xff1a; 启动服务 yarn 工具 系统&#xff1a;Windows 11 前置要求&#xff1a;安装node.js并配置好国内镜像源 参考&#xff1a;本人写的《node.js下载、安装、设置国内镜像源…

css 元素高度从0过度到auto的两种方案

1.使用display: grid; 和 grid-template-rows: 0fr; <div class"item"><div class"grid"><div><ul class"ulAA" v-if"menuGroup.gongsijieshao.child.length > 0 "><li v-for"item in menuGroup.…

node.js下载、安装、设置国内镜像源(永久)(Windows11)

目录 node-v20.18.0-x64工具下载安装设置国内镜像源&#xff08;永久&#xff09; node-v20.18.0-x64 工具 系统&#xff1a;Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v20.18…

【三十八】【QT开发应用】vlcplayer视频播放器(一)实现视频播放,视频暂停,视频停止,进度条调节,音量调节,时长显示功能

效果展示 vlcplayer_test视频播放器 MainWidget.ui 注意控件的布局和命名&#xff0c;控件的命名和信号与槽函数的绑定有关&#xff0c;所以这点很重要。 下载VLC组件和环境配置 videolan下载地址我下载的是vlc-3.0.8-win64版本. 将下载的文件复制粘贴到项目文件中. 复制粘…