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

shell学习4

目录

一、统计文本中的词频

二、压缩javascript

三、打印文件的或行中的第n个单词或列---awk

3.1 利用awk打印文件中每行中的第五个单词。

3.2 利用awk打印当前目录下的文件的权限和文件名

3.3 利用awk打印从M行到N行这个范围内的所有文本

3.4 利用awk 部分提取文件中的内容

3.5 利用awk 逆序打印

四、解析文本中的电子邮件地址和URL---egrep

五、在文件中移除包含某个单词的句子---sed

5.1 删除包含“mobile phones” 的句子

5.2 对目录中的所有文件进行文本替换


一、统计文本中的词频

#!/bin/bash
if [ $# -ne 1 ];
then
echo "用法错误,请按照这样使用:./ceshi.sh word.txt";
exit -1
fi
filename=$1 
egrep -o "\b[[:alpha:]]+\b" $filename | \  
awk '{ count[$0]++ }
END{ printf("%-14s%s\n","Word","Count") ;
for(ind in count)
{ printf("%-14s%d\n",ind,count[ind]); }
}'

①[ $# -ne 1 ] : 如果传递给脚本的参数不是1

②$1传递给脚本的第一个参数,$0就是脚本本身 

③-o 表示只匹配本身。

egrep -o "\b[[:alpha:]]+\b" $filename 只用于输出单词。用 -o 选项打印出由换行符分隔的匹配字符序列。这样我们就可以在每行中列出一个单词。
\b 是单词边界标记符。 [:alpha:] 是表示字母的字符类。 awk 命令用来避免对每一个单词
进行迭代。因为 awk 默认会逐行执行 {} 块中的语句,所以我们就不需要再为同样的事编写循环了。
借助关联数组,当执行 count[$0]++ 时,单词计数就增加。最后,在 END{} 语句块中通过迭代所有的单词,就可以打印出单词及它们各自出现的次数。


二、压缩javascript

cat sample.js |  tr -d '\n\t' |  tr -s ' ' |  sed 's:/\*.*\*/::g' |  sed 's/ \?\([{}();,:]\) \?/\1/g'

tr  -s   删除所有重复出现的字符序列

tr -d    删除字符串中出现的所有字符

tr -d '\n\t' :移除 '\n' 和 '\t'
tr -s '  ':移除多余的空格

sed 's:/\*.*\*/::g':移除注释

因为我们需要使用 /* 和 */ ,所以用 : 作为 sed 的定界符,这样就不必对 / 进行转
义了。
* 在 sed 中被转义为 \* 。
.* 用来匹配 /* 与 */ 之间所有的文本。

sed 's/ \?\([{}();,:]\) \?/\1/g' :移除 { } ( ) ;: 以及 , 前后的空格。(去掉标红符号前后的空格)

 sed 代码中的 / \?\([{ }();,:]\) \?/ 用于匹配, /\1/g 用于替换。
 \([{ }();,:]\) 用于匹配集合 [ { }( ) ; , : ] (出于可读性方面的考虑,
在这里加入了空格)中的任意一个字符。 \( 和 \) 是分组操作符,用于记忆所匹配的
内容,以便在替换部分中进行向后引用。对 ( 和 ) 转义之后,它们便具备了另一种特
殊的含义,进而可以将它们作为分组操作符。位于分组操作符前后的 \? 用来匹配
可能出现在字符集合前后的空格。
 在命令的替换部分,匹配字符串(也就是一个可选的空格、一个来自字符集的字
符再加一个可选的空格)被匹配的子字符串所替换。对于匹配的子字符串使用了
向后引用,并通过分组操作符 () 记录了匹配内容。可以用符号 \1 向后引用分组
所匹配的内容。


三、打印文件的或行中的第n个单词或列---awk

3.1 利用awk打印文件中每行中的第五个单词。

3.2 利用awk打印当前目录下的文件的权限和文件名

3.3 利用awk打印从M行到N行这个范围内的所有文本

3.4 利用awk 部分提取文件中的内容

3.5 利用awk 逆序打印

NR:是总共读取了多少行

这个 awk 脚本非常简单。我们将每一行都存入一个关联数组中,用行号作为数组索引(行
号由 NR 给出),最后由 awk 执行 END 语句块。为了得到最后一行的行号,在 { } 语句块中使用
lno=NR 。因此,这个脚本从最后一行一直迭代到第0行,将存储在数组中的各行以逆序方式
打印出来。


四、解析文本中的电子邮件地址和URL---egrep

电子邮件:

URL:

因为用到了扩展正则表达式(例如+),所以得使用 egrep 命令

.  匹配任意一个字符 

\. 用来匹配点字符,而不是任何字符的通配符。

 [a-zA-Z]{2,4} 表示字母的长度应该在2到4之间(包括2和4)。eg:cn、com、edu


五、在文件中移除包含某个单词的句子---sed

5.1 删除包含“mobile phones” 的句子

文本内容要保证在在同一行。

 该正则表达式的格式为: 's/ 匹配模式/替代字符串 /g' 。

这里的匹配模式是用来匹配整句文本的正则表达式。文件中的每一句话第一个字符都是空
格,句与句之间都以“ . ”来分隔。因此我们需要匹配内容的格式就是:空格+若干文本+需要匹
配的字符串+若干文本+句点。一个句子除了作为定界符的句点之外,可以包含任意字符。因此我
们要使用 [^.] 。 [^.]* 可以匹配除句点之外的任何字符的组合。用来匹配文本的“mobile phone”
被放置在两个 [^.]* 之间。每一个匹配的句子均被 // 替换(注意, / 与 / 之间没有任何内容)。

5.2 对目录中的所有文件进行文本替换

将所有.cpp文件中的 Copyright 替换成 Copyleft.

 我们使用 find 在当前目录下查找所有的.cpp文件,然后使用 print0 打印出以null字符( \0 )作为分隔符的文件列表。(这可以避免文件名中的空格所带来的麻烦。)接着使用通道将列表传递
给 xargs ,后者将对应的文件作为 sed 的参数,由 sed 对文件内容进行修改。

相关文章:

shell学习4

目录 一、统计文本中的词频 二、压缩javascript 三、打印文件的或行中的第n个单词或列---awk 3.1 利用awk打印文件中每行中的第五个单词。 3.2 利用awk打印当前目录下的文件的权限和文件名 3.3 利用awk打印从M行到N行这个范围内的所有文本 3.4 利用awk 部分提取文件中的内…...

VR全景行业的应用价值如何呈现?

互联网高速发展的今天,多媒体所包含的种类也是越来越多,而一些较为传统的表现方式已经越来越无法满足大部分客户对展示方式的要求。而在传统的表现方式中,展现的方式无非是静态的平面图片以及动态的视频,但是他们都有一个缺点就是…...

ESP-IDF:TCP多线程并发服务器

核心代码&#xff1a; 核心思想就是主线程只处理socket监听功能&#xff0c;把数据处理部分分配到不同的线程中去处理。来了一个客户端连接&#xff0c;就分配新的线程去处理该客户端的数据请求。 代码&#xff1a; /多线程并发服务器/ #include <stdio.h> #include …...

Springboot扩展点之SmartInitializingSingleton

前言这篇文章会重点分析一下SmartInitializingSingleton扩展点的功能 特性、实现方式 、工作原理。SmartInitializingSingleton扩展点内只有一个扩展方法&#xff0c;且执行时机在Spring Bean的生命周期里比较靠后&#xff0c;很重要&#xff0c;但是也很简单。功能特性1、Smar…...

基于linux内核的驱动开发学习

1 驱动 定义&#xff1a;驱使硬件动起来的程序 种类&#xff1a;裸机驱动&#xff1a;需求分析--》查原理图--》查芯片手册--》code 系统驱动&#xff1a;需求分析--》查原理图--》查芯片手册--》设备树--》code --》安装到内核中…...

python3 django gunicorn

首先&#xff0c;Gunicorn是一个高效的Web服务器&#xff0c;地位相当于Java中的Tomcat。简单来说gunicorn封装了HTTP的底层实现&#xff0c;我们通过gunicorn启动服务&#xff0c;用户请求与服务相应都经过gunicorn传输。下载gunicorn的方法也比较简单&#xff0c;在django工程…...

专家分享 | 租赁型售楼处标准化示范区提效研究

2023年2月8日上午&#xff0c;优积科技邀请原金地集团北京公司 高级室内设计专业应锎经理为我司团队分享《租赁型售楼处标准化示范区提效》的专题。 此次专家分享课题加上大家踊跃讨论时间长达3小时&#xff0c;会上应总详细介绍了租赁型售楼处标准化示范区提效&#xff0c;需…...

linux之echo使用技巧

参考文章&#xff1a;linux基本功系列-echo命令实战一、echo 命令是什么&#xff1f;作用&#xff1a; echo命令能将指定文本显示在Linux命令行上&#xff0c;或者通过重定向符写入到指定的文件中。语 法&#xff1a;echo [-ne][字符串] / echo [–help][–version]补充说明&am…...

Keras实例教程(7)之构建模型的第三种方式

多年以前,在TensorFlow中搭建深度学习模型对于很多人来说其实仍然是比较困难的。相比之下,Keras作为独立于TensorFlow的一种深度学习框架则要简单很多。在TensorFlow与PyTorch的竞争中逐渐式微的情况下,TensorFlow团队终于宣布Keras将成为在tensorflow2.0中构建和训练模型的…...

【JUC并发编程】18 CopyOnWriteArrayList源码也就够看2分钟

文章目录1、CopyOnWriteArrayList概述2、原理 / 源码1&#xff09;构造函数2、add()3&#xff09;get()4&#xff09;remove()5&#xff09;iterator()1、CopyOnWriteArrayList概述 CopyOnWriteArrayList相当于线程安全的ArrayList&#xff0c;底层是一个可变数组。 特点如下…...

如何优雅的实现回调函数?

本篇文章又是一期优雅的代码编程介绍———回调函数。 传统的nodejs编程都是这样的 const fs require(fs) fs.readFile(test.txt,utf8, function(err, dataStr){if(err){} }) 嵌套层级如果多了就成回调地狱了。如果我们将这种风格的代码转换成这样呢&#xff1f; const fs …...

3GPP-NR Band20标准定义频点和信道(3GPP V17.7.0 (2022-12))

Reference test frequencies for NR operating band n20 Table 4.3.1.1.1.20-1: Test frequencies for NRoperating band n20 and SCS 15 kHz CBW [MHz]carrierBandwidth...

Excel表格的公式不想显示出来,可以这样操作

在制作Excel表格的时候&#xff0c;很多人做数据会用到函数公式&#xff0c;这些编辑都是默认可以看到的。 但有时候我们不想让他人看到自己的计算思路和所用公式&#xff0c;有没有办法可以隐藏公式&#xff0c;只显示数据呢&#xff1f;答案是肯定的&#xff0c;今天我们就来…...

【零基础入门前端系列】—语义化标签、实体字符、视频、音频(八)

【零基础入门前端系列】—语义化标签、实体字符、视频、音频&#xff08;八&#xff09; 一、什么是HTML语义化标签 语义化的标签&#xff0c;旨在让标签有自己的含义 如上代码&#xff1a;p标签与span标签的区别之一就是&#xff0c;p标签的含义是段落而span标签没有独特的…...

超详细讲解线性表和顺序表!!

超详细讲解线性表和顺序表&#xff01;&#xff01;线性表顺序表顺序表的概念及结构静态顺序表动态顺序表顺序表接口实现1、创建2、初始化3、扩容4、尾插5、打印6、销毁7、尾删8、头插9、头删10、插入任意位置11、删除任意位置12、查找13、修改线性表 线性表&#xff08;linea…...

大数据之-Nifi-Nifi的安装_启动_认识Nifi的操作台---大数据之Nifi工作笔记0002

然后我们看一下如何安装nifi 这个上一节已经说了 然后看一下环境准备,这个自己去安装就可以了,需要jdk,1.8就可以了,然后 maven安装上就可以了 然后去下载,这里下载Linux版本的 1.9.2的版本比较稳定 下载以后,避免端口冲突要修改端口默认是8080,修改为58080 然后启动很简单,看…...

【大数据clickhouse】clickhouse 常用查询优化策略详解

一、前言 在上一篇我们分享了clickhouse的常用的语法规则优化策略&#xff0c;这些优化规则更多属于引擎自带的优化策略&#xff0c;开发过程中只需尽量遵守即可&#xff0c;然而&#xff0c;在开发过程中&#xff0c;使用clickhouse更多将面临各种查询sql的编写甚至复杂sql的…...

【Java项目】基于Java+MySQL+Tomcat+maven+Servlet的个人博客系统的完整分析

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【Java项目】 ✈️✈️本篇内容:个人博客系统前后端分离实现&#xff01; &#x1f680;&#x1f680;个人代码托管github&#xff1a;博客系统源码地址&#xff…...

java 程序员怎么做找工作

java 程序员怎么做找工作 在网络招聘网站上搜索职位。在中国&#xff0c;像智联招聘、前程无忧、猎聘网等招聘网站上&#xff0c;有许多公司在招聘JAVA程序员。通过这些网站可以快速找到自己合适的工作。 关注社交媒体和专业网站。 加入一些面向JAVA程序员的社交媒体和专业网…...

S7-1200对于不同项目下的PLC之间进行开放式以太网通信的具体方法示例

S7-1200对于不同项目下的PLC之间进行开放式以太网通信的具体方法示例 如下图所示,打开TIA博途创建一个新项目,并通过“添加新设备”组态 S7-1200 客户端 ,选择 CPU1214C DC/DC/DC (client IP:192.168.0.102),建立新子网; 首先编写客户端程序:打开OB1编程界面,选择指令…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...