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

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

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 : 输出示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901963.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决电脑突然没有声音

问题描述&#xff1a;电脑突然没有声音了&#xff0c;最近没有怎么动过系统&#xff0c;没有安装或者卸载过什么软件&#xff0c;也没有安装或者卸载过驱动程序&#xff0c;怎么就没有声音了呢&#xff1f; 问题分析&#xff1a;仔细观察&#xff0c;虽然音量按钮那边看不到什…

基于Arduino的LED亮灭按键控制

一、项目简介 通过一个按键控制LED的亮灭&#xff0c;实现按键按一下LED点亮&#xff0c;再按一下LED熄灭&#xff0c;交替循环。 二、控制原理 1. 按键检测原理&#xff1a; 将Arduino的监测端口设置为输入上拉模式&#xff08;INPUT_PULLUP&#xff09;&#xff0c;用于连…

初始JavaEE篇——多线程(4):生产者-消费者模型、阻塞队列

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 文章目录 阻塞队列生产者—消费者模型生产者—消费者模型的优势&#xff1a;生产者—消费者模型的劣势&#xff1a; Java标准库中的阻…

【vue3|第29期】Vue3中的插槽:实现灵活的组件内容分发

日期&#xff1a;2024年10月24日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉在这里插入代码片得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不…

多款云存储平台存在安全漏洞,影响超2200万用户

据苏黎世联邦理工学院研究人员Jonas Hofmann和Kien Tuong Turong的发现&#xff0c;端到端加密&#xff08;E2EE&#xff09;云存储平台存在一系列安全问题&#xff0c;可能会使用户数据暴露给恶意行为者。在通过密码学分析后&#xff0c;研究人员揭示了Sync、pCloud、Icedrive…

docker中部署mysql时一直报Get“http://“

原因是使用阿里镜像是网速过慢的问题 解决方式&#xff1a;重新配置镜像 j解决docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request canc-CSDN博客

深度学习--CNN实现猫狗识别二分类(附带下载链接, 长期有效)

1. 代码实现(包含流程解释) 样本量: 8005 # # 1.导入数据集(加载图片)数据预处理# 进行图像增强, 通过对图像的旋转 ,缩放,剪切变换, 翻转, 平移等一系列操作来生成新样本, 进而增加样本容量, # 同时对图片数值进行归一化[0:1] from tensorflow.keras.preprocessing.image …

2024/10/27周报

文章目录 摘要Abstract深度学习预测进出水水质使用UCI机器学习库中的水处理数据集代码描述具体代码示例实验结果 智能比对示例数据示例比对步骤Python 代码示例结果解读应用场景 总结改进建议 摘要 本周对南宁伶俐工业园区污水处理厂进行调研&#xff0c;了解了该污水处理厂的…

H5实现PDF文件预览,使用pdf.js-dist进行加载

H5实现PDF文件预览&#xff0c;使用pdf.js-dist进行加载 一、应用场景 在H5平台上预览PDF文件是在原本已经开发完成的系统中新提出的需求&#xff0c;原来的系统业务部门是在PC端进行PDF的预览与展示&#xff0c;但是现在设备进行了切换&#xff0c;改成了安卓一体机进行文件…

记一次真实项目的性能问题诊断、优化(阿里云redis分片带宽限制问题)过程

前段时间&#xff0c;接到某项目的压测需求。项目所有服务及中间件&#xff08;redis、kafka&#xff09;、pg库全部使用的阿里云。 压测工具&#xff1a;jmeter(分布式部署)&#xff0c;3组负载机&#xff08;每组1台主控、10台linux 负载机&#xff09; 问题现象&#xff1…

基于SSM的网上购物系统的设计与实现

技术介绍 本系统运用了JSP技术、SSM框架、B/S架构和myspl数据库 MySQL 介绍 MySQL是一种关系型的数据库管理系统&#xff0c;属于Oracle旗下的产品。MySQL的语言是非结构化的&#xff0c;使用的用户可以在数据上进行工作。这个数据库管理系统一经问世就受到了社会的广泛关注…

神仙公司名单(成都)

神仙公司&#xff08;成都&#xff09; 神仙公司&#xff0c;继续。 最近对古城很感兴趣&#xff0c;加上前两周吃的串串还记忆犹新&#xff0c;这期写一下四川省省会&#xff1a;成都。 在互联网人眼中&#xff0c;成都似乎是一个存在感很低的城市&#xff0c;但实际上成都一直…

【电机控制】相电流重构——单电阻采样方案

【电机控制】相电流重构——单电阻采样方案 文章目录 [TOC](文章目录) 前言一、基于单电阻采样电流重构技术原理分析1.1 单电阻采样原理图1.2 基本电压矢量与电流采样关系 二、非观测区2.1 扇区过渡区2.2 低压调制区 三、非观测区补偿——移相法四、参考文献总结 前言 使用工具…

C语言实现栈和队列

代码已经上传我的资源&#xff0c;需要可自取 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&…

Python实现贝叶斯优化器(Bayes_opt)优化简单循环神经网络分类模型(SimpleRNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 贝叶斯优化器 (BayesianOptimization) 是一种黑盒子优化器&#xff0c;用来寻找最优参数。 贝叶斯…

Linux资源与网络请求

参数说明&#xff1a; d : 改变显示的更新速度&#xff0c;或是在交谈式指令列( interactive command)按 sq : 没有任何延迟的显示速度&#xff0c;如果使用者是有 superuser 的权限&#xff0c;则 top 将会以最高的优先序执行c : 切换显示模式&#xff0c;共有两种模式&#…

软件测试岗位,职业前景到底怎样?

最近经常被问到软件测试这个行业的前景&#xff0c;网上也有大量唱衰测试这个行业的声音&#xff0c;很多选择职业方向的同学对是否要进入这个职业也非常迷茫。 所以开一贴来聊一聊秋草对软件测试这个岗位的要求以及对其前景的看法。 软件测试到底是个什么样的岗位&#xff1…

如何学习cuda编程?

第一本cuda教材: CUDA By Example​ developer.nvidia.com/cuda-example 配套网课&#xff1a; Udacity CS344: Intro to Parallel Programming​ developer.nvidia.com/udacity-cs344-intro-parallel-programming 记得做网课作业。 然后就靠项目上手了。 我当时实习时候的项…

ProTable样式缺失

在使用Ant Design Pro开发页面时&#xff0c;想要引用ProComponents组件中的ProTable表格&#xff0c;引入官方文档的案例发现缺少样式 官方文档地址ProTable - 高级表格 - ProComponents (ant.design) 引入的是第一个Demos 样式预览&#xff1a; 代码 import { EllipsisO…

今天不分享技术,分享秋天的故事

引言 这个爱情故事好像是个悲剧&#xff0c;你说的是婚姻。爱情没有悲剧&#xff0c;对爱者而言&#xff0c;爱情怎么会是悲剧呢。对春天而言&#xff0c;秋天是它的悲剧吗。结尾是什么&#xff0c;等待&#xff0c;之后呢&#xff0c;没有之后。或者说&#xff0c;等待的结果…