两个实用的shell命令:sed和awk用法

简介: 两个实用的shell命令:sed和awk用法

我们先来看一下力扣上的shell题库中的一题:


fbef4b55d09a4a749652c8449b3890fd.png

实现这个功能一般来说我们会想到tail和head命令来指定打印前几行或者后几行。但使用sed命令可以更简洁的实现相同的功能:

tail -n+10 file.txt | head -1
# 利用sed或awk
sed -n '10p' file.txt
-n: 仅显示script处理后的结果
p: 打印 匹配行
awk "NR==10" file.txt


sed的用法


sed 是一种流编辑器,它是文本处理中非常重要的工具,本身是一个管道命令,主要是以行为单位进行处理,支持正则表达式,不影响源文件,可以将数据行进行替换、删除、新增、选取等特定工作。


命令格式

1. sed [options] 'command' file(s)
2. sed [options] -f scriptfile file(s)


参数:文件 指定待处理的文本文件列表


sed常用选项

  • -e<script>或--expression=<script>:以选项中的指定的script来处理输入的文本文件;
  • -f<script文件>或--file=<script文件>:以选项中指定的script文件来处理输入的文本文件;
  • -h或--help:显示帮助;
  • -n或--quiet或——silent:仅显示script处理后的结果;
  • -V或--version:显示版本信息。


sed常用命令


  • a\ # 在当前行下面插入文本。
  • i\ # 在当前行上面插入文本。
  • c\ # 把选定的行改为新的文本。
  • d # 删除,删除选择的行。
  • D # 删除模板块的第一行。
  • p # 打印模板块的行。
  • P # (大写) 打印模板块的第一行。
  • s # 替换指定字符


sed常用场景


sed最常用的就是替换操作

sed替换标记

g # 表示行内全面替换。  

p # 表示打印行。  

w # 表示把行写入一个文件。  

x # 表示互换模板块中的文本和缓冲区中的文本。  

y # 表示把一个字符翻译为另外的字符(但是不用于正则表达式)

\1 # 子串匹配标记

& # 已匹配字符串标记


常用场景示例:

# 用linux替换全部unix
sed 's/unix/linux/g' test.txt
# 只替换第三个
sed '3 s/unix/linux/g' test.txt
# 在范围内替换
sed '1,3 s/unix/linux/g' geekfile.txt


s 命令表示替换 第二个参数unix表示原内容 第三个参数linux表示替换内容  g表示全局替换

8aff4a2301da43c9accf3f57ba4d7853.png


注意: 如果我们仅仅是想对单词进行修改的话,因为sed做的是文本匹配,可能会出现把一些文件的前缀或者后缀替换的操作。解决办法是单词后面加个空格 。


awk的用法

awk命令与sed不同,它是按列处理,支持正则表达式。它在命令行中使用,但更多是作为脚本来使用。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。

命令格式

awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)


awk常用选项


  • -F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:,默认的分隔符是连续的空格或制表符
  • -v var=value 赋值一个用户定义变量,将外部变量传递给awk
  • -f scripfile 从脚本文件中读取awk命令
  • -m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。


awk常用场景

awk获取指定行

awk '{ print $2,$3 }' filename


awk查看进程pid


1. sheepxi 1234 a1
2. sheepfri 5678 a2
3. sheepman 1000 c1


常用场景:比如说我们在开发时需要查看一下当前有哪些进程正在跑

3d2aec7c38584aa99d84357323a669d7.png

此时如果我们需要打印一下进程id,我们可以管道符连接awk 进行查看


de3fff64f52c47c2ab48298794462dc9.png


相关练习:统计词频


目录
打赏
0
0
0
0
18
分享
相关文章
|
3月前
|
Shell 输出命令完全指南:echo 与 printf 的深度剖析
本文深入解析了 Shell 编程中 `echo` 和 `printf` 两个核心输出命令的用法与区别。`echo` 简单易用,适合基础输出;`printf` 功能强大,支持复杂格式化。文章从语法、转义序列、高级技巧到实际应用场景(如日志记录、进度显示)逐一讲解,并对比两者的性能与适用场景,帮助开发者根据需求灵活选择。最后通过进阶技巧和常见问题解答,进一步提升对两者的掌握程度。
138 1
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
“说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
|
5月前
|
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
370 32
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
170 20
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
218 12
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
889 7
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
182 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
160 1
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
1386 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问