首页 > 系统相关 >Linux Bash字符串操作

Linux Bash字符串操作

时间:2022-12-01 21:23:23浏览次数:84  
标签:23 pattern var substr file Linux 字符串 Bash

1. 在 SHELL 中同时判断多个条件

在 SHELL if 语句中使用 "||" 和 "&&" 要用两个独立的 [ ]

if [ a -gt b ] && [ a -lt c ]

2. 判断字符串为空的方法

if [ "$str" =  "" ]

if [ x"$str" = x ]

3. 截取字符串

${varible:start:len}

截取变量 varible 从位置 start 开始长度为 len 的子字符串。第一个字符的位置为0。
可以省略第三项,默认为一直到最右侧一个字符为止。如下示例 ${file:0:23} 中 start=0 表示从最左侧开始,len=23 表示截取长度为 23 个字符的子串,也即是到 index=22 的字符为止。
示例 ${file:23} 中 start=23 表示从 index=23 的字符开始,一直截取到最右一个字符结束。注意 index=23 和 len=23 的区别。
示例 ${file: -17} 中 start=-17 表示 index=-17 的字符开始,一直截取到最右一个字符结束。负号表示从右侧开始数起,最右一个字符为 -1,右侧倒数第二个为 -2,以此类推。注意冒号与负号之间有一个空格,一定不能省略,没有空格运行时会报错。

# hello_test.sh
abs_filepath="/home/phillee/test_tmp/hello_world_202104021730.mp4"
directory_path=${file:0:23}
base_filepath=${file:23}
postfix=${file: -17}
echo ${abs_filepath}
echo ${directory_path}
echo ${base_filepath}
echo ${postfix}

# console of the output
/home/phillee/test_tmp/hello_world_202104021730.mp4
/home/phillee/test_tmp/
hello_world_202104021730.mp4
_202104021730.mp4

4. 计算字符串长度

${#str}

5. 替换字符串

在 BashScript 中,pattern 是 glob 风格的

${var/pattern/substr} :首次。查找 var 所表示的字符串中,第一次被 pattern 所匹配到的字符串,以 substr 替换之。

${var//pattern/substr} :全部。查找 var 所表示的字符串中,所有能被 pattern 所匹配到的字符串,以 substr 替换之。

${var/#pattern/substr} :行首。查找 var 所表示的字符串中,行首被pattern所匹配到的字符串,以 substr 替换之。

${var/%pattern/substr} :行尾。查找 var 所表示的字符串中,行尾被pattern所匹配到的字符串,以 substr 替换之。

6. 格式化输出数字或字符串

比如我在 for 循环中处理完某些指令后,想要按照可以指示 for 循环的指数命名相应的文件,循环十次 0-9,保存结果中后缀分别为 _00, _01, ..., _09 这种,当然可以简单粗暴使用 if 判断,但问题是有没有更简单的做法呢?

我觉得下面的这些处理方式相对而言更加普遍适用。

普通十进制数字直接使用 printf 重新赋值即可,%02d 表示格式化成 2 位有效数字,不足两位前面补零,d 表示处理整数。

a=$(printf "%02d" $a)

如果是浮点型数据,带小数点的小数这种,%2.1f 表示格式化为 2 位有效数字,小数点后保留一位,f 表示处理浮点型数据。

a=$(printf "%2.1f" $a)

字符串比较特殊一些,因为如果直接使用 printf 输出,%08s 表示格式化为 8 位长度的字符串,右对齐,不足八位的前面是空格,而不是数字 0,所以如果要以这种形式来处理的话,需要再加一步,将空格替换成0。s 表示按字符串处理。

a=$(printf "%08s" $a | tr " " "0")

拓展资料

  1. Shell字符串截取(非常详细) http://c.biancheng.net/view/1120.html

标签:23,pattern,var,substr,file,Linux,字符串,Bash
From: https://www.cnblogs.com/phillee/p/14649562.html

相关文章

  • [oeasy]python0022_框架标题的制作_banner_结尾字符串_end
    结尾字符串(end)回忆上次内容​python3​​的程序是一个5.3M的可执行文件​​python3​​里面存的是cpu指令可以执行的那种我们可以把指令对应的汇编找到​​objdum......
  • [oeasy]python0022_框架标题的制作_banner_结尾字符串_end
    ​ 结尾字符串(end)回忆上次内容​python3​​的程序是一个5.3M的可执行文件​​python3​​里面存的是cpu指令可以执行的那种我们可以把指令对应的汇编......
  • 力扣 leetcode 844. 比较含退格的字符串
    问题描述给定s和t两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回true。#代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。提示:1......
  • linux常用工具三
    一、yum软件包管理工具注:yum安装或移除一个工具都需要管理员权限。1.查看可安装工具yumlist查看所有可安装工具。2.查找工具1)yumsearchkey搜索指定关键字key的工具。2)yu......
  • Linux 安装
    centos下载地址:​​https://www.centos.org/download/​​以下针对各个版本的ISO镜像文件,进行一一说明:CentOS-7.0-x86_64-DVD-1503-01.iso:标准安装版,一般下载这个就可以......
  • linux中指定以指定的单位显示文件的大小
     001、以bp显示[root@PC1test]#lsa.map[root@PC1test]#ls-ltotal1228800-rw-r--r--.1rootroot1258291200Dec120:03a.map 002、以适当单位显示......
  • Linux性能监控的常用工具/命令
    1.top-Linux系统进程监控       top命令是性能监控程序,他是Linux系统管理员经常使用的监控系统性能的工具。top命令可以定期显示所有正在运行和实际运行并且更......
  • 求一个字符串中连续出现次数最多的子串
    例如字符串“abababc”,最多连续出现的为ab,连续出现三次。求一个字符串中连续出现的次数最多的子串,首先生成后缀数组例如abababcbababcababcbabcabcbcc这题跟 后缀数组求最......
  • java-字符串
    1.不可变字符串String类没有提供修改字符串的方法。可以采用这种方式进行修改Stringstr="greeting";str=str.substring(0,3)+"p!";2.检测字符串是否相等s.equals(t)一定不......
  • linux软件安装记录
    系统基本信息:操作系统:ubuntu20.04.1LTSkernel:Linux5.4.0-47-genericArchitecture:x86-641.docker安装postgres安装简介:docker安装posggres再安装postgis扩展行不......