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

开发
虽然 Python 等脚本语言在复杂任务中更具优势,但使用 Shell 脚本处理简单的文件操作和文本处理依然十分高效。

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

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

一、找文件的小能手

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

1.查找指定类型文件

查找 .txt 和 .pdf 文件:

find . \( -name "*.txt" -o -name "*.pdf" \) -print

使用正则表达式查找 .txt 和 .pdf:

find . -regex ".*\(\.txt|\.pdf\)$"

-iregex:忽略大小写的正则。

2.查找特定条件的文件

查找最近 7 天被访问的文件:

find . -atime -7 -type f -print

查找大于 2K 的文件:

find . -type f -size +2k

3.后续操作

删除 .swp 文件:

find . -type f -name "*.swp" -delete

将 10 天前的 .txt 文件拷贝到 OLD 目录:

find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;

二、文本搜索神器

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

1.常用选项

只显示匹配行:

grep "pattern" file

统计匹配次数:

grep -c "pattern" file

打印匹配行的行号:

grep -n "pattern" file

递归搜索:

grep -r "pattern" .

2.扩展功能

多模式匹配:

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 工具则旨在消除序列中的冗余重复项,从而达到精简数据集的目的。

1.排序

按数字降序排序:

sort -nrk 1 data.txt

2.去重

去除重复行:

sort file.txt | uniq

统计每行出现的次数:

sort file.txt | uniq -c

五、字符转换

tr是一个在Unix和Linux操作系统中广泛使用的命令行工具,其全称为"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

九、流编辑器

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

1.文本替换

替换每行的第一个匹配项:

sed 's/old/new/' file

全局替换:

sed 's/old/new/g' file

2.其它操作

移除空行:

sed '/^$/d' file

十、文本处理利器

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

1.基本用法

打印每行的第二个字段:

awk '{print $2}' file

统计行数:

awk 'END {print NR}' file

过滤并打印匹配的行:

awk '/pattern/' file

2.进阶功能

按范围打印:

awk 'NR==4,NR==6{print}' file

格式化输出:

seq 10 | awk '{printf "->%4s\n", $1}'

总结

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

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2017-03-02 18:10:20

LinuxShell命令

2024-11-06 17:04:47

AWK编程

2010-07-21 10:05:13

Perl文本处理模块

2013-10-30 10:35:29

Linux命令文本处理

2021-09-10 16:30:29

LinuxShell文本

2021-01-28 08:12:15

Linux命令技巧

2013-08-20 16:14:46

pythonpython文本处理

2019-10-14 11:31:51

工具代码开发

2010-01-06 17:12:26

.Net Framew

2024-03-06 15:57:56

ShellLinux

2024-04-12 12:14:39

Rust字符串代码

2023-12-31 16:23:39

KubernetesPod容器

2019-06-10 13:50:08

Linux命令shell

2023-09-21 23:05:50

jiebaPython

2019-10-29 09:20:48

Python文本正则表达式

2024-11-21 13:02:42

2024-03-11 00:02:00

tr命令文本处理命令字符

2023-10-07 08:25:09

Java处理工具正则表达式

2022-12-29 15:20:34

开发工具

2021-04-29 08:13:49

Mac 工具软件
点赞
收藏

51CTO技术栈公众号