我的编程空间,编程开发者的网络收藏夹
学习永远不晚

shell字符串匹配的实现方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

shell字符串匹配的实现方法

这篇文章主要介绍了shell字符串匹配的实现方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、简介

      Bash Shell提供了很多字符串和文件处理的命令。如awk、expr、grep、sed等命令,还有文件的排序、合并和分割等一系列的操作命令。grep、sed和awk内容比较多故单独列出,本文只涉及字符串的处理和部分文本处理命令。

二、字符串处理

1、expr命令

expr引出通用求值表达式,可以实现算术操作、比较操作、字符串操作和逻辑操作等功能。

(1)计算字符串长度

字符串名为string,可以使用命令${#string}或expr length $string两种方法来计算字符串的长度。若string包括空格,需用双引号引起来(expr length后面只能跟一个参数,string有空格会当作多个参数处理)。

shell字符串匹配的实现方法

(2)子串匹配索引

      expr的索引命令格式为:expr index $string $substring(子串),在字符串$string上匹配$substring中字符第一次出现的位置,匹配不到,expr index返回0。

shell字符串匹配的实现方法

"wo"在字符串string中虽然出现在第7,但还是返回o首次出现的位置5。

(3)子串匹配的长度

       expr match $string $substring,在string的开头匹配substring字符串,返回匹配到的substring字符串的长度,若string开头匹配不到则返回0,其中substring可以是字符串也可以是正则表达式。

shell字符串匹配的实现方法

"world"尽管在string中出现,但是未出现在string的开头处,因此返回0。

(4)抽取子串

Bash Shell提供两种命令#{...}和expr实现抽取子串功能。

其中#{...}有两种格式。

格式一:#{string:position}从名称为$string的字符串的第$position个位置开始抽取子串,从0开始标号。

格式二:#{string:position:length}增加$length变量,表示从$string字符串的第$position个位置开始抽取长度为$length的子串。

(都是从string的左边开始计数抽取子串)

shell字符串匹配的实现方法

#{...}还提供了从string右边开始计数抽取子串的功能。

格式一:#{string: -position},冒号与横杠间有一个空格

格式二:#{string:(position)}

shell字符串匹配的实现方法

expr substr也能够实现抽取子串功能,命令格式:expr substr $string $position $length,与#{...}最大不同是expr substr命令从1开始进行标号。

shell字符串匹配的实现方法

接着使用正则表达式抽取子串的命令,但只能抽取string开头处或结尾处的子串。

抽取字符串开头处的子串,格式一:expr match $string ' $substring '。格式二:expr $string : ' $substring ',其中冒号前后都有一个空格。

抽取字符串结尾处的子串,格式一:expr match $string '.* $substring '。格式二:expr $string : '.* $substring '。.*表示任意字符的任意重复。

shell字符串匹配的实现方法

(5)删除子串

删除字串是指将原字符串中符合条件的子串删除,命令只有${...}格式。

从string开头处删除子串,格式一:${string#substring},删除开头处与substring匹配的最短子串。格式二:${string##substring}删除开头处与substring匹配的最长子串。其中substring并非是正则表达式而是通配符。

shell字符串匹配的实现方法

从string结尾处开始删除,格式一:${string%substring},删除结尾处与substring匹配的最短子串。格式二:${string%%substring}删除结尾处与substring匹配的最长子串。与上述命令仅在#和%之间不同。

(5)替换子串

替换子串命令都是${...},可以在任意处、开头处、结尾处替换满足条件的子串。其中的substring都不是正则表达式而是通配符。

在任意处替换子串命令,格式一:${string/substring/replacement},仅替换第一次与substring相匹配的子串。格式二:${string//substring/replacement},替换所有与substring相匹配的子串。

shell字符串匹配的实现方法

在开头处替换与substring相匹配的子串,格式为:${string/#substring/replacement}。

在结尾除替换与substring相匹配的子串,格式为:${string/%substring/replacement}。

shell字符串匹配的实现方法

三、对文件的排序、合并和分割

      文本处理命令包括sort命令、uniq命令、join命令、cut命令、paste命令、split命令、tr命令和tar命令,它们实现对文件记录排序、统计、合并、提取、粘贴、分割、过滤、压缩和解压缩等功能,它们与sed和awk构成了Linux文本处理的所有命令和工具。

(1)sort命令

sort命令是一种对文本排序的工具,它将输入文件看做由多条记录组成的数据流,而记录由可变宽度的字段组成,以换行符作为定界符。sort命令格式:sort [选项] [输入文件]

shell字符串匹配的实现方法

       sort命令默认的域分隔符是空格符,-t选项可用于设置分隔符。sort -t: test中-t与":"之间是没有空格的。未指定-t分隔符是空格符,这时记录内开头与结尾的空格都将被忽略,如(空格):root:(空格)则只有一个域,-t:指定冒号则这条记录就包含了三个域。

         sort命令默认是按第1个域进行排序的,也可以通过-k选项指定某个域进行排序。例如:sort -t: -k3 test。

       sort命令-n选项可以指定根据数字大小进行排序(不按字母顺序排序)。

       sort命令-r选项用于将排序结果逆向显示,如使用-n按数字从小到大排序后,使用-r选项将结果逆向显示。

       sort命令-u选项去掉排序结果中的重复行。

       sort命令-o选项加上文件名将结果保存到另一个文件中(sort默认将排序后的结果输出到屏幕上)。

       sort命令-m选项将两个排好序的文件合并成一个排好序的文件,在文件合并前它们必须已经排好序。-m选项对未排序的文件合并是没有任何意义的。

       sort和awk都是分域处理文件的工具,两者结合起来可以有效地对文本块进行排序。

(2)uniq命令

      uniq命令用于去除文本文件中的重复行,类似sort -u,但uniq命令去除的重复行必须是连续重复出现的行,中间不能夹杂任何其他文本行,而sort -u命令使所有的重复记录都被去掉。

      uniq命令有3个选项:

shell字符串匹配的实现方法

 uniq -c test,打印每行在文本中重复出现的次数。

(3)join命令

      join命令用于实现两个文件中记录的连接操作,将两个文件中具有相通域的记录选择出来,再将这些记录所有的域放在一行(包含来自两个文件的所有域)。如join -t: a.txt b.txt,将a.txt和b.txt具有共同域的记录连接到一起。

shell字符串匹配的实现方法

       join命令的结果默认是不显示这些未进行连接的记录,-a和-v选项用于显示这些未进行连接的记录,-a1和-v1指显示文件1中未连接的记录,而-a2和-v2指显示文件2中的未连接记录。-a与-v的区别是:-a显示以共同域进行连接的结果和未进行连接的记录,而-v则不显示以共同域进行连接的记录。

       join命令默认显示连接记录在两个文件中的所有域,而且按顺序。-o选项用于改变结果显示的格式,可以指定显示哪几个域、按什么顺序显示这些域。例如:join -t: -o1.1 2.2 1.2 a.txt b.txt,其中-o1.1 2.2 1.2表示显示格式依次显示第1个文件中的第1个域、第2个文件中的第2个域、第1个文件中的第2个域,结果显示三个域。

     join -t: -i -1 3 -2 1 a.txt b.txt,文件1的第3个域和文件2的第1个域进行连接,-i忽略大小写。join命令在对两个文件进行连接时,两个文件必须都是按照连接域排好序的。

(4)cut命令

cut命令用于从标准输入或文本文件中按域或行提取文本,cut [选项] 文件,cut的选项如下:

shell字符串匹配的实现方法

      cut -c1-5 a.txt,提取a.txt的第1~5个字符。-c有三种表示方式:-cn表示第n个字符、-cn,m表示第n个字符和第m个字符、-cn-m表示第n个字符到第m个字符。-c是按字符提取文本的,无须使用-d改变域分隔符,-f按域提取文本时就需要使用-d设置域分隔符了。-f同样也可以用三种方式指定域数或域范围。

     cut可以灵活提取文本文件中的内容,默认将提取内容放在标准输出上,也可以使用文件重定向来将内容保存到文件。

(5)paste命令

paste命令用于将文本文件或标准输出中的内容粘贴到新的文件,它可以将来自不同文件的数据粘贴到一起,形成新的文件。paste命令格式:paste [选项] file1 file2,其选项如下:

shell字符串匹配的实现方法

       paste FILE1 FILE2,粘贴FILE1和FILE2,FILE1在前,将FILE1的内容作为每行记录的第1域、FILE2的内容作为第2域。可以使用-d设置域分隔符paste -d: FILE1 FILE2。

      paste命令默认是将一个文件按列粘贴的,-s选项可以实现将一个文件按行粘贴。

      ls | paste -d" " - - - -,从标准输入中读取数据时"-"选项才起作用,"-"表示读取1次标准输入数据即读取到标准输入数据中的一个域,- - - - 每行显示4个文件名。

(6)split命令

split命令用于将大文件切割成小文件,split可以按照文件的行数、字节数切割文件,并能在输出的多个小文件中自动加上编号。split命令格式:splite [选项] 待切割的大文件 输出的小文件。

shell字符串匹配的实现方法

      split -2 a.txt final.txt,按2行对a.txt进行切割,每2行记录切割成1个文件。split命令在final.txt后面自动加上编号以区分不同的小文件,编号为aa~zz。

      split -b100 a.txt,-b选项在切割文件时仅考虑了文件大小并未考虑记录的完整性。split -C100 a.txt,按100B切割a.txt,按-C并不严格按照100B的大小进行切割,而是在切割时尽量维持每行的完整性。

(7)tr命令

tr命令实现字符转换功能,类似于sed命令,tr能实现的功能sed命令都可以实现。tr [选项] buffer1 buffer2 < outputfile,其选项有三个,它只能从标准输入读取数据。

shell字符串匹配的实现方法

tr -d A-Z < a.txt,删除a.txt文件中所有的大写字母。

tr -d "[\n]" < a.txt,删除a.txt文件中所有的换行符。

tr -s "[\n]" < a.txt,将重复出现的换行符压缩成一个换行符。

tr命令也可以加上buffer1和buffer2,将buffer1用buffer2来替换,tr "[a-z]" "[A-Z]" < a.txt,将a.txt中的小写字母替换成大写字母。

(8)tar命令

tar命令是linux的归档命令,实现linux系统文件的压缩和解压缩。tar [选项] 文件名或目录名,tar的常用选项如下:

shell字符串匹配的实现方法

tar -cf a.tar *.txt,将所有的.txt结尾的文件放入压缩包a.tar。-c表示创建新的包,-f通常是必选选项。

tar -tf a.tar,查看a.tar压缩包的内容。-t列出包内容。

tar -rf a.tar log*,将以log开头的文件添加到a.tar中,-u选项也可用于为包添加新的文件,-u选项完全能代替-r选项。

解压非gzip格式的压缩包:tar -xvf 压缩包名称

解压gzip格式的压缩包:tar -zxvf 压缩包名称

感谢你能够认真阅读完这篇文章,希望小编分享的“shell字符串匹配的实现方法”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

shell字符串匹配的实现方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

shell字符串匹配的实现方法

这篇文章主要介绍了shell字符串匹配的实现方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、简介 Bash Shell提供了很多字符串和文件处理的命令。如aw
2023-06-09

shell字符串匹配的实现

一、简介 Bash Shell提供了很多字符串和文件处理的zrcfONEJA命令。如awk、expr、grep、sed等命令,还有文件的排序、合并和分割等一系列的操作命令。grep、sed和awk内容比较多故单独列出,本文只涉及字
2022-06-04

shell如何匹配字符串中的数字

在shell中,可以使用正则表达式来匹配字符串中的数字。可以使用grep命令来进行匹配,具体的语法如下:```shellgrep -oE '[0-9]+' 文件名```其中,`-o`参数表示只输出匹配到的内容,`-E`参数表示使用扩展正则表
2023-09-26

Python字符串的匹配算法

暴力匹配算法的思想很简单,就是从主串的第一个字符开始,依次和模式串的每一个字符进行匹配,如果匹配失败,则继续从主串的下一个字符开始匹配,直到匹配成功或者主串被匹配完为止。

mysql字符串匹配的方法是什么

MySQL提供了多种方法来进行字符串匹配,其中常用的有以下几种:1. LIKE操作符:LIKE操作符是最常用的字符串匹配方法,它可以在WHERE子句中用来匹配一个模式。LIKE操作符支持使用通配符进行模糊匹配,通配符包括%(表示匹配任意字符
2023-10-09

mysql regexp匹配多个字符串实现

目录项目场景:解决方案:使用myBATis实现项目场景:数据结构其中nameArr存储的是名字集合,现在的需求是传入"aaa","fff",需要把包含这两个name的数据都查出来。解决方案:可以使用REGEXP来匹配包含多个特定ID的
mysql regexp匹配多个字符串实现
2024-09-18

字符串匹配算法—单模式匹配—RK 算法

RK 算法的思路是这样的:我们通过哈希算法对主串中的 n-m+1 个子串分别求哈希值,然后逐个与模式 串的哈希值比较大小。如果某个子串的哈希值与模式串相等,那就说明对应的子串和模式串匹配了(这 里先不考虑哈希冲突的问题)。

awk模糊匹配字符串的方法是什么

awk中的模糊匹配字符串可以通过使用正则表达式来实现。可以使用`~`运算符来判断一个字符串是否匹配某个模式。例如,假设我们有一个包含字符串的文件,我们想要找到以"abc"开头的所有行,可以使用以下命令:```shellawk '/^abc/
2023-08-16

python匹配任意字符串的方法有哪些

Python匹配任意字符串的方法有以下几种:1.使用正则表达式:可以使用re模块中的match()、search()、findall()等方法,通过正则表达式匹配任意字符串。2.使用字符串方法:可以使用字符串方法中的startswith()
2023-06-13

perl匹配多个字符串的方法是什么

在 Perl 中,可以使用正则表达式来匹配多个字符串。以下是一些常用的方法:1. 使用管道符(|)来匹配多个字符串:```perlif ($string =~ /string1|string2|string3/) {# 匹配成功的处理代码}
2023-10-07

JS正则匹配字符串的方法是什么

本篇内容介绍了“JS正则匹配字符串的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用 js 的search 和 match ,其中
2023-06-26

Shell中实现字符串反转方法分享

在做关键词清洗过程中,需要将一类不符合某个字结尾的词过滤出来,思路是把这一批词按最后一个字排序,于是想到了先把这些词反转一下,如把12345转为54321,好像以前在夜息的文章里看过用shell可以实现,就百度了一下,找到几个可行的解决方法
2022-06-04

我们一起聊聊 Aho-Corasick 字符串匹配算法的实现

当预先知道字符串字典(例如计算机病毒数据库)时,自动机的构造可以离线执行一次,编译后的自动机存储起来供以后使用。在这种情况下,它的运行时间与输入的长度加上匹配条目的数量成线性关系。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录