提升效率必备,掌握这些Shell文本处理技能!

Shell脚本是Linux系统里的一项基本功,就算它的语法看起来有点奇怪,读起来也不是特别顺畅,但在一些情况下,它仍然是最能干的解决办法。学好Shell脚本,不仅让你对Linux系统了解更深,还能让你手快地做好很多日常任务。

在这篇文章里,我会跟你分享在Linux Shell里处理文字时最常使用的几个“利器”:findgrepxargssortuniqtrcutpastewcsedawk,而且每个都会配上实用的例子。我们的目标是让脚本简单直白,最好一行命令或者两行就搞定。

找文件的小能手

find是个找文件的小能手,本事大得很,不管文件躲在哪个角落,它都能帮你把它揪出来。

查找指定类型文件

  • 查找 .txt.pdf 文件:
find . \( -name "*.txt" -o -name "*.pdf" \) -print
  • 使用正则表达式查找 .txt.pdf
find . -regex ".*\(\.txt|\.pdf\)$"

-iregex: 忽略大小写的正则

查找特定条件的文件

  • 查找最近 7 天被访问的文件:
find . -atime -7 -type f -print
  • 查找大于 2K 的文件:
find . -type f -size +2k

后续操作

  • 删除 .swp 文件:
find . -type f -name "*.swp" -delete
  • 将 10 天前的 .txt 文件拷贝到 OLD 目录:
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;

文本搜索神器

grep是个超级好用的工具,专门用来在大量文字中找到你需要的内容。

常用选项

  • 只显示匹配行:
grep "pattern" file
  • 统计匹配次数:
grep -c "pattern" file
  • 打印匹配行的行号:
grep -n "pattern" file
  • 递归搜索:
grep -r "pattern" .

扩展功能

  • 多模式匹配:
grep -e "pattern1" -e "pattern2" file
  • 查找并删除文件:
grep "pattern" file* -lZ | xargs -0 rm

命令行高效参数处理器

xargs 具有将命令输出作为后续命令行参数的功能,从而实现了多个命令的高效与灵活链式执行。

实用示例

  • 多行输出转为单行:
cat file.txt | xargs
  • 将文件中的每一行传递给脚本:
cat file.txt | xargs -I {} ./script.sh -p {}
  • 统计 .cpp 文件中的行数:
find . -name "*.cpp" -print0 | xargs -0 wc -l

排序与去重

进行数据去重与排序操作:利用 sort 命令实现数据的有序排列,而采用 uniq 工具则旨在消除序列中的冗余重复项,从而达到精简数据集的目的。

排序

  • 按数字降序排序:
sort -nrk 1 data.txt

去重

  • 去除重复行:
sort file.txt | uniq
  • 统计每行出现的次数:
sort file.txt | uniq -c

字符转换

tr是一个在UnixLinux操作系统中广泛使用的命令行工具,其全称为"translate"。该工具主要用于对来自标准输入或指定文件的字符进行替换、删除或压缩操作。

基本语法结构如下:

tr [选项] 从字符集 到字符集
  • 从字符集 指定了需要被转换或删除的原始字符。
  • 到字符集 指定了转换目标字符或操作(如果只想删除字符,则此部分可省略)。

基础用法

例如,以下命令将把输入文本中的所有小写字母转换为大写字母:

echo "hello world" | tr 'a-z' 'A-Z'

另一个例子是删除文本中的所有数字:

echo "Example123 text." | tr -d '0-9'

tr命令还支持一些选项来扩展其功能,如-d用于删除字符,而不是转换它们;-s用于压缩连续重复的字符为一个。

按列切割文本

cut`是 Linux 中用于按列截取文本的命令。它通过指定分隔符(默认为制表符)来选择并提取文件中的特定字段或字符。它常用于处理结构化数据,如 CSV 文件,快速提取有用的信息。

基本操作

  • 截取第 2 和第 4 列:
cut -f2,4 filename
  • 排除第 3 列:
cut -f3 --complement filename

按列拼接文本

paste命令用于将多个文件的内容按列拼接在一起,生成一个新的输出。它会逐行读取每个文件,并将相应行的内容用制表符(默认)或指定的分隔符连接起来。常见用法包括将两个文件横向拼接在一起,或将单个文件的多列数据合并。

基本用法

将两个文本按列拼接到一起

cat file1 file2
colin
book

默认的定界符是制表符,可以用-d指明定界符。

paste file1 file2 -d ','
colin,book

统计行、词和字符数

wc(word count)是一个用于统计文件内容的命令行工具,能够统计文件中的行数、单词数、字符数等信息。常见用法包括统计行数wc -l、单词数wc -w以及字符数wc -m。它可以处理多个文件,并在终端中输出每个文件的统计结果,通常用于文本分析和简单的文件内容审计。

基本用法

  • 统计行数:
wc -l file
  • 统计单词数:
wc -w file

9. 流编辑器

sed(Stream Editor)是一个轻量级、强大的文本处理工具,适用于在流式数据或文件中进行快速的查找、替换、删除、插入等操作。它以非交互的方式逐行处理文本,支持正则表达式,常用于批量编辑和转换文件内容。sed的常见用途包括替换字符串、删除或提取特定行、插入文本等,非常适合需要在命令行中对文件进行简单编辑的场景。

文本替换

  • 替换每行的第一个匹配项:
sed 's/old/new/' file
  • 全局替换:
sed 's/old/new/g' file

其它操作

  • 移除空行:
sed '/^$/d' file

10. 文本处理利器

awk 是处理结构化文本的强大工具,支持复杂的模式匹配和数据处理。

基本用法

  • 打印每行的第二个字段:
awk '{print $2}' file
  • 统计行数:
awk 'END {print NR}' file
  • 过滤并打印匹配的行:
awk '/pattern/' file

进阶功能

  • 按范围打印:
awk 'NR==4,NR==6{print}' file
  • 格式化输出:
seq 10 | awk '{printf "->%4s\n", $1}'

总结

虽然 Python 等脚本语言在复杂任务中更具优势,但使用 Shell 脚本处理简单的文件操作和文本处理依然十分高效。本文介绍的这些工具都是非常基础且实用的命令,希望能帮助你快速提升在 Linux 下的操作效率。

推荐阅读


  • 提升效率必备!学习awk命令,轻松搞定数据

  • 高效传输秘籍,揭秘Rsync和SCP的优劣,助你做出明智选择!

  • 当你拥有一台云服务器,你最想做的事情是啥?

  • IP地址乱成一团?用Shell一键搞定!

  • Nginx日志分析:编写Shell脚本进行全面日志统计

  • 如何用find命令按文件大小快速查找并美化输出显示

  • 不再担心数据丢失:用rsync打造你的自动化备份解决方案

  • 从繁琐到简单:Python实现快速批量文件重命名攻略!


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用程序方式获取与处理MySQL表数据

8.1  执行多条语句获取 MySQL 表数据 8.1.1  MySQL 中的常量 8.1.2  MySQL 中的变量 1.用户变量 用户可以在表达式中使用自己定义的变量,这样的变量称为用户变量。 用户变量在使用前必须定义和初始化,如果使用没有初始化的变量&#x…

外包干了三年,快要废了。。。

先简单说一下自己的情况,普通本科,在外包干了3年多的功能测试,这几年因为大环境不好,我整个人心惊胆战的,怕自己卷铺盖走人了,我感觉自己不能够在这样蹉跎下去了,长时间呆在一个舒适的环境真的会…

算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300. 最长递增子序列 1.dp定义:dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.递推公式:if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较,而是我们要取dp[j] 1的最大值…

JAVA 的excel数据批量导入解析 现在都用什么API工具 Apache POI 、EasyExcel 、easypoi有什么区别

📝个人主页🌹:个人主页 ⏩收录专栏⏪:SpringBoot 🌹🌹期待您的关注 🌹🌹,让我们共同进步! 在Java中,处理Excel数据批量导入解析时,常…

高空抛物检测算法的应用场景解析

高空抛物事件频发,对公众安全构成严重威胁。无论是居民区还是商业中心,从高层建筑中丢弃物品都可能导致人员伤亡和财产损失。传统的监控手段多以事后追溯为主,无法在事发时及时预警和干预。为应对这一难题,视觉分析技术的发展为高…

全国历年高考真题2008-2024

目录 分享链接: ⬇️⬇️⬇️ 点击下载

单元测试之mock使用

一、简介 一般程序中A类的m1方法调用B类的m2方法,而B类的m2方法又调用了C类的m3方法以此类推等等,而其中的某个方法的一些数据又需要调用其它服务或者查询数据库,一般单元测试只针对某个功能进行测试,但是如上面的情况在做单元测试…

Day9 | Java框架 | SpringBoot

Day9 | Java框架 | SpringBoot SpringBoot简介入门程序概述起步依赖 基础配置配置文件格式:3种yaml语法规则yaml数据读取三种格式 多环境启动配置文件参数命令行参数多环境开发控制:Maven & SpringBoot 多环境兼容 配置文件分类:4种 整合…

蓝桥杯4. Fizz Buzz 经典问题

题目描述 给定一个整数 NN,从 1 到 NN 按照下面的规则返回每个数: 如果这个数被 3 整除,返回 Fizz。如果这个数被 5 整除,返回 Buzz如果这个数能同时被 3 和 5 整除,返回 FizzBuzz。如果这个数既不能被 3 也不能被 5…

本地部署Llama 3.1大模型

Meta推出的Llama 3.1系列包括80亿、700亿、4050亿参数版本,上下文长度扩展至12.8万tokens,并增加了对八种语言的支持。 部署模型需要用到Ollama的一个工具,访问官方网站https://ollama.com 点击下载,选择下载你对应的操作系统下…

【无标题】Efinity 0基础进行流水灯项目撰写(FPGA)

文章目录 前言一、定义概念 缩写1. 二、性质1.2. 三、使用步骤编译常见错误1. 没加分号2. end 写多了 编译成功的标志总结参考文献 前言 数电课设 使用 FPGAIDE 使用 Efinity 一、定义概念 缩写 1. 二、性质 1. 2. 三、使用步骤 python代码块matlab代码块c代码块编译…

手把手带你拿捏C指针(2)(含冒泡排序)

文章目录 一、数组名的理解二、使用指针访问数组三、一维数组传参本质四、冒泡排序五、二级指针六、指针数组七、指针数组模拟二维数组 一、数组名的理解 在上⼀个章节我们在使⽤指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,8,9,…

工信部【信创认证】全面解读,包含信创集成项目管理师,信创规划管理师等

行业背景 国资委发布79号文件:详细规划了中央企业和国有企业信创国产化的实施路径和时间表,明确提出了到2027年100%完成信创“替代”的宏伟目标。这一政策不仅涵盖了芯片、基础软件、操作系统、中间件等重要领域,更意味着从2023年起&#xf…

5天涨粉3W!26个视频12.2W粉!AI做这种视频这么火嘛?

前几天刷到一个AI视频的账号,当时刷到时候才9W粉丝,今天又刷到他,已经12.2W了!这涨粉速度,简直了!! 26个视频,12.2万粉丝 在这个看脸的时代,内容创作者们为了吸引眼球&a…

3.js - 着色器设置点材质(螺旋星系特效)

上图 着色器设置点材质时,在顶点着色器中,最好设置gl_PointSize,不然看不到你在页面中添加的点 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControlsimport gsap from gsapimp…

【截图服务 +打包】pkg打包 puppeteer

目录 最后结论 windows打包成服务 定制executablePath 用程序来查找chrome.exe 代替上面的写配置文件 服务遇到的问题 使用java开一个线程启动 遇到的问题与解决 版本匹配问题 打出包后的运行报错问题 linux下的安装 安装n 库缺少 程序运行后的报错 制作 运行报…

化工机械如何精准地进行网络营销推广?

合作咨询联系竑图 hongtu201988 化工机械行业该如何做网络推广,让销量和利润都有明显的提升呢?湖南竑图网络来为大家分析分析: 一、产品的用户是谁? 在传统行业中,用户群体的多样性不容忽视。比如机械设备有很多种&am…

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果&#xff1a; 解密后的数据就是正常数据&#xff1a; 后端&#xff1a;使用的是spring-cloud框架&#xff0c;在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30…

Kamailio-超强dispatcher负载均衡模块

Kamailio 负载均衡的功能主要依靠 Dispatcher 模块完成&#xff0c;模块官方文档参看 为什么要引入负载均衡&#xff1f;如何使用&#xff1f; 引入和配置功能路由调用命令行指令 为什么要引入负载均衡&#xff1f; Q: 如果单台VOIP服务的性能不能满足业务需求了&#xff0…

C++中的I/O流

本节主要看代码理解 I/O流继承关系 iostream 主要类 cin cout cerr clog while&#xff08;cin>>str&#xff09; &#xff5b; //处理 &#xff5d; 当接收ctrl z 或 ctrl c时&#xff0c;会停止&#xff0c; 原理&#xff1a;重载操作符bool&#xff0c;令指定istr…