Shell字符串操作集合

  • 字符操作
    • 字符串的长度
    • 获取字符串中某些字符的个数
    • 统计单词的个数
    • bash提供的数组数据结构它是以数字为下标的和C语言从0开始的下一样
    • awk里面的数组
    • 取子串
    • 匹配求子串
    • sed有按行打印的功能记得用tr把空格换为行号
    • tr来取子串
    • head和tail
    • 查询字串
    • 子串替换
    • tac 会将文本的内容倒置显示正如名字和 cat 相反一样功能和cat也是相反的
    • 插入子串
    • 删除子串
    • 子串比较使用test命令
    • 子串排序
    • 进制转换
    • 正则表达式处理url
    • sed 和 awk 匹配文件中的行
    • 处理格式化的文本
    • 文件关联操作

字符操作

1.字符串的长度

* $ var="get the length of me"
$ echo ${#var}
20
* $ expr length "$var" #注意这里是双引号
20
* $ echo $var | awk '{printf("%d",length($0))}'
20
* $ echo -n $var | wc -c # echo每次输出时,会自动的输出换行符,-n表示部署出那一个换行符
20

2.获取字符串中,某些字符的个数

* $ echo $var | tr -cd g | wc -c
2
$ echo -n $var | sed 's/[^g]//g' | wc -c
2
$ echo -n $var | sed 's/[^gt]//g' | wc -c
5

3.统计单词的个数

* $ echo $var | wc -w

4.bash提供的数组数据结构,它是以数字为下标的,和C语言从0开始的下一样

* $ var="get length of me"
$ var_arr=($var) #这里把var字符串,以数组的形式存放到var_arr中,默认以空格分割
$ echo ${var_arr[0]} ${var_arr[1]} ${var_arr[2]} ${var_arr[3]} ${var_arr[4]}
get the length of me
$ echo ${var_arr[@]} #@表示整个字符串
get the length of me
$ echo ${var_arr[*]} #*表示整个字符串
get the length of me
$ echo ${#var_arr[@]}#求得整个字符数组的元素个数
5
$ echo ${#var_arr[0]}#求得某个字符串的字符个数
3
$ var_arr[5]="new_element" #直接给数组元素赋值
$ echo ${var_arr[@]}
get the length of me new_element
$ echo ${#var_arr[@]}
6
* $ for i in $var; do echo $i" "; done;
get the length of me

5.awk里面的数组

* echo $var | awk '{printf("%d %s\n",split($0,var_arr," "),var_arr[1])}'
split把字符串按照空格分割,存放到var_arr中,并返回数组的长度,注意,这里第一个元素的下标不是0,而是1。
* awk把一行按照空格分成若干个域,并用$1,$2,$3...来引用,$0表示整行,NF表示该行域的总数。
* echo $var | awk '{split($0,var_arr," ");for(i in var_arr) printf("%s ",var_arr[i]);}'
这里的for循环中,循环变量为下标
* echo $var | awk '{split($0,var_arr," ");delete var_arr[1]}'
删除第一个数组元素

6.取子串

* $ var="get length of me"
$ echo ${var:0:3}
get
$ echo ${var(-2)} #反方向
me
$ echo `expr substr "$var" 5 3`
the
$ echo $var | awk '{printf("%s\n",substr($0,9,6))}' #从第九个位置开始选取6个字符
length
* 使用cut取子串
$ echo $var | cut -d " " -f 5
me
* $ echo $var | sed 's/ [a-z]*//g'
get
删除空格+字母串
$ echo $var | sed 's/[a-z]* //g'
me
删除字母串+空格

7.匹配求子串

* $ echo ${var%% *} #从最右边开始,删除最左边空格右边的所有字符
get
* $ echo ${var% *} #从最右边开始,删除第一个空格右边的所有字符
get the length of
* $ echo ${var##* } #从最左边开始,删除最右边空格左边的所有字符
me
* $ echo ${var#* } #从最左边开始,删除第一个空格左边的所有字符
the length of me

8.sed有按行打印的功能,记得用tr把空格换为行号

* $ echo $var | tr " " "\n" | sed -n 5p
me
* $ echo $var | tr " " "\n" | sed -n 1p
get

9.tr来取子串

* $ echo $var | tr -d " "
getthelengthofme
* $ echo $var | tr -cd "[a-z]" #仅仅保留字母
getthelengthofme

10.head和tail

* $ echo "abcdefghijk" | head -c 4
abcd
* $ echo "abcdefghijk" | tail -c 4
hijk

11.查询字串

* $ var="get the length of me"
$ expr index "$var" t
3
* $ echo $var | awk '{printf("%d\n",match($0,"the"));}'
5

12.子串替换

* $ var="get the length of me"
$ echo ${var/ /_} #把第一个空格替换成下划线
get_the length of me
$ echo ${var// /_} #把所有的空格都替换成下划线
get_the_length_of_me
$ echo $var | awk '{sub(" ","_",$0);printf("%s\n",$0);}'
get_the length of me
$ echo $var | awk '{gsub(" ","_",$0);printf("%s\n",$0);}'
get_the_length_of_me
$ echo $var | sed 's/ /_/'
get_the length of me
$ echo $var | tr " " "_"
get_the_length_of_me
$ echo $var | tr "[a-z]" "[A-Z]"
GET THE LENGTH OF ME

13.tac 会将文本的内容倒置显示,正如名字和 cat 相反一样,功能和cat也是相反的

14.插入子串

* $ var="get the length of me"
$ echo ${var/ /_ } #在第一个空格前加上_
get_ the length of me
$ echo ${var// /_ } #在所有的空格前都加上_
get_ the_ length_ of_ me
$ echo ${var/ / _}
get _the length of me
$ echo ${var// / _} #在所有的空格之后都加上_
get _the _length _of _me* $ echo $var | sed 's//\1_/' #在第一个空格之后加上_
get _the length of me
$ echo $var | sed 's//\1_/g'
get _the _length _of _me
$ echo $var | sed 's/[a−z]∗ [a−z]∗/\2 \1/' #调换get和the的位置
the get length of me

15.删除子串

* $ var="get the length of me"
$ echo ${var// /}
getthelengthofme* $ echo $var | awk '{gsub(" ","",$0);printf("%s",$0);}'
getthelengthofme* $ echo $var | sed 's/ //g'
getthelengthofme* $ echo $var | tr -d " "
getthelengthofme

16.子串比较使用test命令

17.子串排序

* $ echo $var | tr " " "\n" | sort #正排序
get
length
me
of
the
$ echo $var | tr " " "\n" | sort -r
the
of
me
length
get
* $ cat data.txt | tr " " "\n" | sort -n

18.进制转换

* $ echo "ibase=10;obase=16;10" | bc
A

19.正则表达式处理url

* $ url="ftp://anonymous:ftp@mirror.lzu.edu.cn/software/scim-1.4.7.tar.gz"
$ echo $url | grep "ftp://[a-z]*:[a-z]*@[a-z0-9\./-]*" #判断url的有效性
ftp://anonymous:ftp@mirror.lzu.edu.cn/software/scim-1.4.7.tar.gz
* $ echo "$url" "$(expr index "$url" :)" | awk '{printf("%s\n",substr($1,1,$2-1));}' #截取协议
ftp
$ echo ${url%%:*}
ftp
* $ echo ${url##*@} | cut -d "/" -f 1 #截取域名
mirror.lzu.edu.cn
$ tmp=${url##*@};echo ${tmp%%/*}
mirror.lzu.edu.cn
* $ tmp=${url##*@};echo ${tmp%/*} #截取路径
mirror.lzu.edu.cn/software
* $ echo ${url##*/} #截取文件名
scim-1.4.7.tar.gz
* $ echo $url | sed 's/.*[0-9].//g' #截取文件类型
tar.gz

20.sed 和 awk 匹配文件中的行

* $ sed -n 7,9p README #打印README7-9行

21.处理格式化的文本

* $ cat /etc/passwd | cut -d ":" -f 1,5 #截取/etc/passwd文件中的用户名和组
* $ cat /etc/group | cut -d ":" -f 1,3 #截取/etc/group文件中的组名和组id

22.文件关联操作

* $ join -o 1.1,2.1 -t":" -1 4 -2 3 /etc/passwd /etc/group
#join命令用来连接两个文件,类似于数据库中两个表的连接。-t指定分隔符,
-1 4 -2 3 指定按照第一个文件的第四列和第二个文件的第三列,即组ID进行
连接,-o 1.1 2.1表示仅仅输出第一个文件的第一列和第二个文件的第一列

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百练4982 踩方格

总时间限制: 1000ms 内存限制: 65536kB描述有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;b. 走过的格子立即塌陷无法再走第二次;…

Qt自定义QML模块

自定义QML模块 含义为将常用风格的Button,Text,RadioButton,或者自定义的控件作为一个控件进行使用,节省代码。 优点: 代码简洁,减少重复代码自定义的控件进行封装重复使用可以与QML自带的库区别开来优化项目结构 一、创建模块…

POJ3984 迷宫问题【BFS】

好长时间没有敲过代码了,感觉之前学过的都忘了,趁着这个暑假,打算把之前学习的东西都复习一下,当然得慢慢来,毕竟好长时间不敲代码了,怎么着都有些生疏,再加上之前学的也不咋地,相当…

宏定义基本用法

宏定义 不带参数 宏定义又称为宏代换、宏替换,简称“宏”。 格式: #define 标识符 字符串其中的标识符就是所谓的符号常量,也称为“宏名”。 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。 掌…

广度优先搜索练习之神奇的电梯

广度优先搜索练习之神奇的电梯 Time Limit: 1000ms Memory limit: 65536K 题目描述 有一座已知层数为n的高楼,这座高楼的特殊之处在于只能靠电梯去上下楼,所以要去到某一层要非常耽误时间,然而更悲哀的是,这座高楼的电梯是限号…

ubuntu安装proxychains及自动补全

proxychains ProxyChains是本人目前为止用到的最方便的代理工具。 inux下代理一般是通过http_proxy和https_proxy这两个环境变量,但是很多软件并不使用这两个变量,导致流量无法走代理。在不使用vpn的前提下,linux并没有转发所有流量的真全局…

快速幂讲解

快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下: 假设我们要求a^b,那么其实b是可以…

如何查询资料

如何查询资料技术资料及问题查询查询方法分类查找提取关键字GitHub项目优先使用Google搜索引擎Copy Paste论文查找询问主管 测试修改使用总结分享 公司信息查询国内公司国外公司 如何查询资料 技术资料及问题查询 查询方法 资料与解决办法的查询大致分为7大类。 1.分类查…

山东省第八届 ACM 省赛 sum of power(SDUT 3899)

Problem Description Calculate ∑ni1im mod (10000000007) for given n,m. Input Input contains two integers n,m(1≤n≤1000,0≤m≤10). Output Output the answer in a single line. Example Input 10 0 Example Output 10 方法:快速幂和大数求和 …

Ubuntu主题更换

Ubuntu主题更换 目前的Ubuntu有Unity和Gnome两个比较流行的版本,以下为Gnome桌面环境的主题更换,其他桌面环境类似。 主题的下载地址,点击 Theme 将在网络上下载的主题文件进行解压,然后拷贝到 /usr/share/themes/ 目录下&…

awk简单使用

awk 用于在linux/unix下对文本和数据进行处理,支持用户自定义函数和动态正则表达式等先进功能。 命令格式: awk BEGIN{ print “start” } pattern { commend } END{print "end"} file awk "BEGIN{ print “start” } pattern { commend } END{pr…

Ubuntu 14.04 下 Virtual Judge 的搭建

前期准备工作 1.1 一个Linux系统 因为现场赛的缘故,我一直使用的都是ubuntu。 这里我测试用的是Ubuntu14.04 Desktop 64bit ,当然选择Server会更好一些. 系统的安装不再赘述,作为服务器请选用Server版本。1.2 更新源 在搭建环境之前,请确保…

BitMap的原理介绍与实现

BitMap 位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。位图是通过将数组下标与应用中的一些值关联映射,数组中该下标所指定的位置上的元素可以用来标识应用中值的情况(是否存在或者数…

MySQL与PHP连接

1、mysql_connect()-建立数据库连接 格式: resource mysql_connect([string hostname [:port] [:/path/to/socket] [, string username] [, string password]]) 例: $conn mysql_connect("localhost", "username", "pa…

QML Profiler性能优化教程

QML Profiler 2018年1月26日 vincent 对于一个程序的开发,性能优化是开发中的一个重要步骤。 我们肯定不希望开发出来的程序表现出卡顿,最好是处处流畅,丝滑般的体验。 对于C程序,我们有很多方法可以做性能优化,例如…

uburntu在不能自动获取网络时的联网设置

一:网络基础配置 1. eth0设置不正确,导致无法正常启动,修改eth0配置文件就好 ubuntu 12.04的网络设置文件是/etc/network/interfaces,打开文件,会看到 auto lo iface lo inet loopback 这边的设置是本地回路。在后…

计算机显卡知识普及

显卡知识普及 一、什么是显卡? 显示接口卡(Video card,Graphics card)、显示器配置卡简称为显卡,是个人电脑基本组成部分之一。 用途是将计算机系统所需要的显示信息进行转换驱动,并向显示器提供信号&…

整除的尾数

Problem Description 一个整数&#xff0c;只知道前几位&#xff0c;不知道末二位&#xff0c;被另一个整数除尽了&#xff0c;那么该数的末二位该是什么呢&#xff1f; Input 输入数据有若干组&#xff0c;每组数据包含二个整数a&#xff0c;b(0<10000,10<b<100)&…

QML 控件大全

QML TypeContainerDelayButtonDialDialogButtonBoxDialogDrawerMenuMenuBarOverlayPageIndicatorRangeSliderScrollViewSpinBoxStackViewSwipeViewSwitchTabBarToolBarToolSeparatorToolTipTumbler QML Type 本篇主要介绍QtQuick Controls 2,Qt Creator 5.10 1.Container im…

斐波那契的整除

Description 已知斐波那契数列有如下递归定义&#xff0c;f(1)1,f(2)1, 且n>3,f(n)f(n-1)f(n-2)&#xff0c;它的前几项可以表示为1&#xff0c; 1&#xff0c;2 &#xff0c;3 &#xff0c;5 &#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34…&#xff0c;现在的…