当前位置: 首页 > news >正文

提升效率必备,掌握这些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实现快速批量文件重命名攻略!


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 虚拟机安装VMware-tools详细教程
  • 基于java+springboot+vue实现的林业产品推荐系统(文末源码+Lw)135
  • 如何把大的txt文件拆分为小的文件?
  • 正版软件 | Sticky Password 终身密码管理器 - 使用教程分享
  • 关于linux里的df命令以及inode、数据块-stat链接数以及关于awk文本处理命令中内置函数sub、gsub、sprintf
  • 如何打造一款成功的游戏
  • 通用四期ARM架构银河麒麟桌面操作系统V10【安装、配置FTP客户端】
  • 小红书为什么起号失败?
  • 【中间件】-容器编排平台Kubernetes简介
  • Vue邮件发送:如何有效集成邮件发送功能?
  • Flink快速上手
  • C# HttpClient 实现HTTP Client 请求
  • 零基础学习Python(八)—— time模块、request模块、数据分析和自动化办公相关模块、jieba模块、文件操作和os相关模块的简单介绍
  • 常见 HTTP 状态码详解与Nginx 文件上传大小限制
  • torchvision数据集使用
  • 《Java编程思想》读书笔记-对象导论
  • ECMAScript6(0):ES6简明参考手册
  • es6
  • es6(二):字符串的扩展
  • iOS编译提示和导航提示
  • JavaScript标准库系列——Math对象和Date对象(二)
  • React-Native - 收藏集 - 掘金
  • SQLServer之索引简介
  • Vue--数据传输
  • 后端_ThinkPHP5
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 微信公众号开发小记——5.python微信红包
  • 用Python写一份独特的元宵节祝福
  • #13 yum、编译安装与sed命令的使用
  • #Z2294. 打印树的直径
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (1) caustics\
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十二)Flink Table API
  • (转)setTimeout 和 setInterval 的区别
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *2 echo、printf、mkdir命令的应用
  • .htaccess配置重写url引擎
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET CLR Hosting 简介
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net core控制台应用程序初识
  • .NET Micro Framework初体验
  • .net 后台导出excel ,word
  • .net 获取某一天 在当月是 第几周 函数
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表