Linux 文本处理三剑客基本用法

Linux文本处理三剑客 - grep sed awk

在这里插入图片描述

1. 基本用法

grep 是一种强大的文本搜索工具,用于在文件中搜索指定的模式(通常是字符串或正则表达式),并输出匹配的行。以下是 grep 的一些基本用法:

基本语法

grep [选项] 模式 [文件...]

常用选项

  • -i:忽略大小写。
  • -v:反向选择,显示不包含匹配模式的行。
  • -c:计算匹配的行数。
  • -l:显示包含匹配模式的文件名。
  • -L:显示不包含匹配模式的文件名。
  • -n:显示匹配的行号。
  • -H:显示文件名(在搜索多个文件时默认启用)。
  • -h:不显示文件名(在搜索多个文件时)。
  • -r-R:递归搜索目录中的文件。
  • -w:只匹配整个单词。
  • -x:只匹配整行。
  • -A NUM:显示匹配行及其后 NUM 行。
  • -B NUM:显示匹配行及其前 NUM 行。
  • -C NUM:显示匹配行及其前后各 NUM 行。
  • -E--extended-regexp:使用扩展正则表达式。
  • -F--fixed-strings:将模式视为固定字符串(不使用正则表达式)。
  • -P--perl-regexp:使用 Perl 兼容正则表达式。

模式

模式可以是简单的字符串,也可以是正则表达式。

示例

  1. 在文件中搜索字符串 “hello”:
grep "hello" filename.txt
  1. 忽略大小写搜索 “hello”:
grep -i "hello" filename.txt
  1. 显示包含 “hello” 的文件名:
grep -l "hello" *.txt
  1. 递归搜索目录中的所有文件(包括子目录):
grep -r "hello" /path/to/directory
  1. 显示匹配 “hello” 的行号:
grep -n "hello" filename.txt
  1. 显示匹配 “hello” 的行及其后两行:
grep -A 2 "hello" filename.txt
  1. 使用扩展正则表达式搜索模式(例如,匹配以 “foo” 开头,后跟任意字符,再以 “bar” 结尾的字符串):
grep -E "^foo.*bar$" filename.txt

请注意,grep 的输出通常默认会打印到标准输出(通常是终端或控制台)。如果你希望将输出保存到文件中,可以使用重定向操作符 >,例如:

grep "hello" filename.txt > output.txt

这样,grep 的输出就会被保存到 output.txt 文件中,而不是显示在终端上。

在这里插入图片描述

2. sed

sed 是一款流式文本编辑器,它允许你对文本进行过滤和转换。以下是 sed 的基本用法和一些常见操作的示例:

基本语法

sed [option] '地址定位+sed指令' filename
  • option:sed命令的选项,用于控制sed的行为。
  • 地址定位:决定对哪些行进行编辑。可以是行号、正则表达式或空(表示所有行)。
  • sed指令:指定要对匹配的行执行的操作,如打印、删除、替换等。
  • filename:要处理的文件名。

常用选项

  • -r--regexp-extended:启用扩展正则表达式。
  • -e:允许在同一命令行上执行多个脚本。
  • -n:取消默认输出,只输出处理过的行。
  • -i:直接修改文件内容,而不是输出到标准输出。

地址定位

  • 行号:如 1 表示第一行,$ 表示最后一行。
  • 正则表达式:如 /pattern/ 表示匹配包含该模式的行。
  • 空:表示对所有行进行操作。

常见指令

  • p:打印匹配的行。
  • d:删除匹配的行。
  • s:替换匹配的内容。格式为 s/原字符串/新字符串/[修饰符]
  • i:在匹配行前插入新行。
  • a:在匹配行后追加新行。
  • c:替换匹配行。

示例

  1. 打印文件内容(默认行为,通常不需要使用 -p,除非与 -n 结合使用):
sed '' filename

sed -n 'p' filename
  1. 删除第一行
sed '1d' filename
  1. 删除最后一行
sed '$d' filename
  1. 删除第2到第4行
sed '2,4d' filename
  1. 打印第2到第4行
sed -n '2,4p' filename
  1. 替换所有 “foo” 为 “bar”
sed 's/foo/bar/g' filename
  1. 在包含 “pattern” 的行前插入 “new line”
sed '/pattern/i\new line' filename
  1. 在包含 “pattern” 的行后追加 “new line”
sed '/pattern/a\new line' filename
  1. 使用扩展正则表达式(例如,匹配以 “foo” 开头的行):
sed -r '/^foo/' filename
  1. 直接修改文件(将 “foo” 替换为 “bar” 并保存到原文件):
sed -i 's/foo/bar/g' filename

请注意,sed 的操作是基于流的,这意味着它逐行处理输入数据。因此,对于大型文件,sed 通常比逐行读取和处理文件的脚本更高效。

在这里插入图片描述

3. awk

awk 是一个强大的文本处理工具,它特别适用于对列式数据进行处理和分析。以下是 awk 的基本用法和一些常见的示例:

基本语法

awk 'pattern { action }' input-file
  • pattern:这是可选的,表示要搜索的模式。如果省略,awk 会对每一行都执行 action
  • action:这是 awk 执行的命令,用花括号 {} 包围。
  • input-file:这是 awk 要处理的输入文件。

常见选项

  • -F fs:指定输入字段分隔符为 fs
  • -v var=value:在 awk 程序中设置一个变量及其值。
  • -f program-file:从指定的文件中读取 awk 程序。

内建变量

  • $0:整行文本。
  • $1, $2, ...:每行的第一个、第二个等字段。
  • NF:字段数量。
  • NR:当前记录(行)号。
  • FS:输入字段分隔符(默认为空格或制表符)。
  • OFS:输出字段分隔符(默认为空格)。

示例

  1. 打印文件的所有行

    awk '{ print }' input.txt
    

    这实际上与 cat input.txt 相同,但 awk 更适合进行更复杂的文本处理。

  2. 打印文件的特定字段

    awk '{ print $1, $3 }' input.txt
    

    这将打印每行的第一个和第三个字段。

  3. 使用字段分隔符

    如果字段由逗号分隔,可以使用 -F 选项:

    awk -F, '{ print $1, $3 }' input.csv
    
  4. 条件匹配

    awk '$3 > 100 { print $1, $3 }' input.txt
    

    这将打印第三个字段大于100的行的第一个和第三个字段。

  5. 设置输出字段分隔符

    awk 'BEGIN { OFS="," } { print $1, $3 }' input.txt
    

    这将使用逗号作为输出字段分隔符。

  6. 使用变量

    awk -v threshold=100 '$3 > threshold { print $1, $3 }' input.txt
    

    这里,threshold 是一个变量,其值在 awk 程序外部设置。

  7. 从文件中读取 awk 程序

    awk -f script.awk input.txt
    

    script.awk 文件包含要执行的 awk 程序。

注意事项

  • awk 程序中的花括号 {} 内的语句应该以分号 ; 或换行符分隔。
  • BEGIN 块中,可以在处理任何输入行之前执行初始化代码。
  • END 块中,可以在处理完所有输入行之后执行清理代码。

awk 是一个功能非常强大的工具,上述只是其基本用法的介绍。通过组合不同的模式和动作,awk 可以用于解决各种复杂的文本处理任务。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

美畅物联丨智能监控,高效运维:视频汇聚平台在储能领域的实践探索

在当今全球能源格局不断变化的大背景下,对清洁能源的需求正以惊人的速度增长。储能项目作为平衡能源供需、提升能源利用效率的关键环节,其规模和复杂度也在不断攀升。在储能项目的运营管理过程中,安全监控、设备运维以及数据管理等方面面临着…

记一次跑前端老项目的问题

记一次跑前端老项目的问题 一、前言二、过程1、下载依赖2、启动项目3、打包 一、前言 在一次跑前端老项目的时候,遇到了一些坑,这里记录一下。 二、过程 1、下载依赖 使用 npm install下载很久,然后给我报了个错 core-js2.6.12: core-js…

【AI系统】推理引擎架构

推理引擎架构 在深入探讨推理引擎的架构之前,让我们先来概述一下推理引擎的基本概念。推理引擎作为 AI 系统中的关键组件,负责将训练好的模型部署到实际应用中,执行推理任务,从而实现智能决策和自动化处理。随着 AI 技术的快速发…

opencvocr识别手机摄像头拍摄的指定区域文字,文字符合规则就语音报警

安装python,pycharm,自行安装。 Python下安装OpenCv 2.1 打开cmd,先安装opencv-python pip install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple2.2 再安装opencv-contrib-python pip install opencv-contrib-python --user …

微信小程序购物车全选反选功能以及合计

微信小程序基于Vant Weapp的购物车功能实现 1、单选 使用微信小程序原生表单组件checkbox和checkbox-group 注意&#xff1a;checkbox原生不支持bind:change事件&#xff0c;checkbox-group支持 <checkbox-group bindchange"handleCheck"><checkbox val…

Linux输入设备应用编程

本章学习输入设备的应用编程&#xff0c;首先要知道什么是输入设备&#xff1f;输入设备其实就是能够产生输入事件的设备就称为输入设备&#xff0c;常见的输入设备包括鼠标、键盘、触摸屏、按钮等等&#xff0c;它们都能够产生输入事件&#xff0c;产生输入数据给计算机系统。…

Unity 利用Button 组件辅助Scroll View 滚动

实现 创建枚举类ScrollDir 以区分滚动方向。每组两个按钮负责同方向上左右/上下滚动。 Update 中实时获取Scroll View 滚动条当前位置。 if (dir.Equals(ScrollDir.vertical)) {posCurrent scroll.verticalNormalizedPosition; } else if (dir.Equals(ScrollDir.horizontal)…

Mac快速安装 chromedriver驱动

全篇大概1200字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间5分钟。 什么是chromedriver&#xff1f; ChromeDriver 充当了 Selenium WebDriver 和 Chrome 浏览器之间的桥梁&#xff0c;允许开发者通过编程控制浏览器进行自动化测试或操作。 一、下载chromedriver…

【网络安全】网站常见安全漏洞 - 网站基本组成及漏洞定义

文章目录 引言1. 一个网站的基本构成2. 一些我们经常听到的安全事件3. 网站攻击者及其意图3.1 网站攻击者的类型3.2 攻击者的意图 4. 漏洞的分类4.1 按来源分类4.2 按危害分类4.3 常见漏洞与OWASP Top 10 引言 在当今的数字化时代&#xff0c;安全问题已成为技术领域不可忽视的…

快速上手 RabbitMQ:使用 Docker 轻松搭建消息队列系统

在现代的分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件、提高系统可扩展性和可靠性的重要工具。RabbitMQ 是一个广泛使用的开源消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xf…

字符串函数和内存函数

字符串函数 1、strlcpy 【字符串拷贝】 &#xff08;将原字符串中的字符拷贝到目标字符数组中&#xff0c;包括终止符号\0&#xff0c;并在这里停止&#xff1b;为了避免越界&#xff0c;目标字符串数组应该足够大去接收&#xff09;&#x1f446; &#xff08;返回值是 dest…

【机器学习】窥数据之序,悟算法之道:机器学习的初心与远方

文章目录 机器学习入门&#xff1a;从零开始学习基础与应用前言第一部分&#xff1a;什么是机器学习&#xff1f;1.1 机器学习的定义1.1.1 举个例子&#xff1a;垃圾邮件分类器 1.2 机器学习的核心思想1.2.1 数据驱动的模式提取1.2.2 为什么机器学习比传统方法更灵活&#xff1…

Dataset用load_dataset读图片和对应的caption的一个坑

代码&#xff1a; data_files {} if args.train_data_dir is not None:data_files["train"] os.path.join(args.train_data_dir, "**")dataset load_dataset("imagefolder",data_filesdata_files,cache_dirargs.cache_dir,) 数据&#xff1…

SpringBoot连接多数据源MySQL、SqlServer等(MyBatisPlus测试)

SpringBoot连接多数据源MySQL、SqlServer等&#xff08;MyBatisPlus测试&#xff09; 在实际的项目开发中&#xff0c;我们往往需要同时连接多个数据源对数据进行处理。本文将详细介绍在SpringBoot下配合MybatisPlus如何连接多数据源&#xff0c;实例将会使用连接MySQL、SqlSe…

GPS模块/SATES-ST91Z8LR:电路搭建;直接用电脑的USB转串口进行通讯;模组上报定位数据转换地图识别的坐标手动查询地图位置

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…

认识自定义协议

经过前面的介绍&#xff0c;我们知道TCP/IP协议有一组五层模型&#xff0c;从上往下为应用层、传输层、网络层、数据链路层和物理层&#xff0c;且在网络中传输的数据都必须经过这几层模型的封装和分用&#xff0c;作为程序员&#xff0c;我们最经常打交道的就是应用层。程序员…

【论文复现】隐式神经网络实现低光照图像增强

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 隐式神经网络实现低光照图像增强 引言那么目前低光照图像增强还面临哪些挑战呢&#xff1f; 挑战1. 不可预测的亮度降低和噪声挑战2.度量友好…

电商项目-微服务网关限流

一、微服务网关限流 我们之前说过&#xff0c;网关可以做很多的事情&#xff0c;比如&#xff0c;限流&#xff0c;当我们的系统被频繁的请求 的时候&#xff0c;就有可能将系统压垮&#xff0c;所以为了解决这个问题&#xff0c;需要在每一个微服务中做限流 操作&#xff0c;但…

数据链路层(四)---PPP协议的工作状态

1 PPP链路的初始化 通过前面几章的学习&#xff0c;我们学了了PPP协议帧的格式以及组成&#xff0c;那么对于使用PPP协议的链路是怎么初始化的呢&#xff1f; 当用户拨号上网接入到ISP后&#xff0c;就建立起了一条个人用户到ISP的物理链路。这时&#xff0c;用户向ISP发送一…

模拟机器故障

模拟机器故障情况 #!/bin/bashdeclare -a aryfor i in seq 40 49 doary[$i]" "echo -en "\e[$i;5m ${ary[]}\e[;0m"donedeclare -a ary for s in seq 1 10000 dofor i in seq 40 49doary[$i]" "echo -en "\e[$i;5m ${ary[]}\e[;0m" …