bash字符串处理

字符串切片:

${var:offset:length}

[[email protected] ~]#mypath="/etc/sysconfig/network-scripts/"
[[email protected] ~]# echo ${mypath:5}   #偏移5个字符显示
sysconfig/network-scripts/
[[email protected] ~]# echo ${mypath:10}  #偏移10个字符显示
nfig/network-scripts/
[[email protected] ~]# echo ${mypath:5:5} #偏移5个字符,取5个字符 
sysco

取出字符串的最后几个字符:${var: -length}

注意:-length之前有空白字符;

[[email protected] ~]# echo ${mypath: -10}
k-scripts/

基于模式取子串

${var#*word}:自左而右,查找var变量中存储的字符串中第一次出现的由word所指明的字符,删除此字符及其左侧的所有内容;

 [[email protected] ~]#mypath="/etc/sysconfig/network-scripts"
[[email protected] ~]# echo ${mypath#*/}
etc/sysconfig/network-scripts

${var##*word}:自左而右,查找var变量中存储的字符串中最后一次出现的由word所指明的字符,删除此字符及其左侧的所有内容;

[[email protected] ~]#mypath="/etc/sysconfig/network-scripts"
[[email protected] ~]# echo ${mypath##*/}
network-scripts

示例:

[[email protected] ~]#mypath="/etc/sysconfig/network-scripts"
[[email protected] ~]# echo ${mypath##*c}
ripts
[[email protected] ~]# echo ${mypath#*c}
/sysconfig/network-scripts

${var%word*}:自右而左,查找var变量中存储的字符串中第一次出现的由word所指明的字符,删除此字符及其右侧的所有内容;

${var%%word*}:自右而左,查找var变量中存储的字符串中最后一次出现的由word所指明的字符,删除此字符及其右侧的所有内容;

示例:

[[email protected] ~]#mypath="/etc/sysconfig/network-scripts"
[[email protected] ~]# echo ${mypath%c*}
/etc/sysconfig/network-s
[[email protected] ~]# echo ${mypath%%c*}
/et

示例:取一个URL的协议和端口

[[email protected] ~]#url="http://www.baidu.com:80"
[[email protected] ~]# echo ${url##*:}
80
[[email protected] ~]# echo ${url%%:*}
http

查找替换:

${var/pattern/replacement}:查找var变量存储的字符中第一次由pattern匹配到的内容,并替换为replacement;

[[email protected] ~]#url="http://www.baidu.com:80"
[[email protected] ~]# echo ${url/www/WWW}
http://WWW.baidu.com:80
[[email protected] ~]# echo ${url/w/W}
http://Www.baidu.com:80

${var//pattern/replacement}:查找var变量存储的字符中所有能够由pattern匹配到的内容,并替换为replacement;

[[email protected] ~]# echo ${url//w/W}
http://WWW.baidu.com:80

${var/#pattern/replacement}:查找var变量存储的字符中最开始处能够由pattern匹配到的内容,并替换为replacement;

[[email protected] ~]# userinfo="root:x:0:0:rootuser:/root:/bin/bash"
[[email protected] ~]# echo ${userinfo/#root/ROOT}
ROOT:x:0:0:root user:/root:/bin/bash

${var/%pattern/replacement}:查找var变量存储的字符中最后位置能够由pattern匹配到的内容,并替换为replacement;

[[email protected] ~]# userinfo="root:x:0:0:rootuser:/root:/bin/root"
[[email protected] ~]# echo ${userinfo/%root/ROOT}
root:x:0:0:root user:/root:/bin/ROOT

查找删除:

${var/pattern}:查找var变量存储的字符中第一次由pattern匹配到的内容,并删除;

${var//pattern}:查找var变量存储的字符中所有能够由pattern匹配到的内容,并删除;

${var/#pattern}:查找var变量存储的字符中最开始处能够由pattern匹配到的内容,并删除;

${var/%pattern}:查找var变量存储的字符中最后位置能够由pattern匹配到的内容,并删除;

[[email protected] ~]# userinfo="root:x:0:0:rootuser:/root:/bin/root"
[[email protected] ~]# echo ${userinfo/root}
:x:0:0:root user:/root:/bin/root
[[email protected] ~]# echo ${userinfo//root}
:x:0:0: user:/:/bin/
[[email protected] ~]# echo ${userinfo/#root}
:x:0:0:root user:/root:/bin/root
[[email protected] ~]# echo ${userinfo/%root}
root:x:0:0:root user:/root:/bin/

字符串大小写转换:

${var^^}:把var变量中的所有小写字母,统统替换为大写;

${var,,}:把var变量中的所有大写字母,统统替换为小写;

[[email protected] ~]# echo $userinfo
root:x:0:0:root user:/root:/bin/root
[[email protected] ~]# myinfo=${userinfo^^}
[[email protected] ~]# echo $myinfo
ROOT:X:0:0:ROOT USER:/ROOT:/BIN/ROOT
[[email protected] ~]# echo ${myinfo,,}
root:x:0:0:root user:/root:/bin/root

变量赋值:

${var:-word}:如果变量var为空或未声明,则返回word所表示的字符串;否则,则返回var变量的值;

[[email protected] ~]# echo $name
                  #这行就是空的
[[email protected] ~]# echo ${name:-tom}
tom
[[email protected] ~]# name=hello
[[email protected] ~]# echo ${name:-tom}
hello

${var:=word}:如果变量var为空或未声明,则返回word所表示的字符串,并且把word赋值为var变量;否则,则返回var变量的值;

[[email protected] ~]# echo $name
                                 #这行就是空的
[[email protected] ~]# name=${name:-tom}
[[email protected] ~]# echo $name
tom
[[email protected] ~]# name=${name:-jerry}
[[email protected] ~]# echo $name
tom

${var:?error}:如果变量var为空或未声明,则返回error为错误信息;否则,则返回var变量的值;

[[email protected] ~]# echo "User‘s name is${name:?wrong}"
-bash: name: wrong
[[email protected] ~]# name=tom
[[email protected] ~]# echo "User‘s name is${name:?wrong}"
User‘s name is tom

${var:+word}:如果变量var为空或未声明,忽略;否则,则返回word;

[[email protected] ~]# unset name
[[email protected] ~]# echo "User‘s name is${name:+wrong}"
User‘s name is
[[email protected] ~]# name=tom
[[email protected] ~]# echo "User‘s name is${name:+wrong}"
User‘s name is wrong
时间: 2024-11-01 12:38:13

bash字符串处理的相关文章

马哥笔记第十六天故障排除、trap、sed、awk、bash数组、bash字符串操作

A.故障排除:             紧急救援模式:rescue,相当于一个小型的linux系统和让你切换到硬盘系统中. 1.grub损坏:                         谨慎操作 dd  if=/dev/zero of=/dev/sda count=1 bs=400   不能大于446,否则破坏分区表中数据.这时需要进入救援模式,选择Rescue installed system,选择语言.键盘设置.是否启用网络.继续continue.选择启动shell.使用chroot

bash 字符串处理

获取字符串长度 %x="abcd" #方法一 %expr length $x 4 # 方法二 %echo ${#x} 4 # 方法三 %expr "$x" : ".*" 4 # expr 的帮助 # STRING : REGEXP   anchored pattern match of REGEXP in STRING 查找子串 %expr index  $x "b" 2 %expr index  $x "a&quo

bash:字符串查找

提供了替换文本的查找替换功能,如 sed s/Wintel/Linux/g data (将Wintel替换为Linux)  大命令 下边是基于变量的小命令: 1)查找与替换 ${data/Wintel/Linux} 从开头找,替换一个 ${data//Wintel/Linux}  从开头找,替换所有 ${data/#Wintel/Linux} 从开头进行匹配 ${data/%Wintel/Linux} 从末尾进行匹配(可用于修改文件扩展名,可以正确改变file.txt.txt这种) 2)模式替换

bash字符串操作

字符串操作: 字符串切片:${var:offset:length} a="world"         ${a:2:2}的结果是:rl     取字符串的最后几个字符:${var: -length}         注意:冒号之后有空格 基于模式取子串:         ${var#*word}:其中word可以是指定的任意字符:自左而右,查找var变量所存储字符中,第一次出现的word,删除字符开头直至第一次wrod出现处之间的所有字符:             # mypath='

Bash 字符串处理命令

字符串长度 str="abc" echo ${#str} 查找子串的位置 str="abc" str1=`expr index $str "a"` echo $str1 选取子串 str="abc" str1=`expr substr $str 1 2` echo $str1 str="abcdef" echo ${str:2} # 从第二个位置开始提取字符串, bcdef echo ${str:2:3}

bash编程快速入门

首先,我们简单的介绍一下bash,bash是GNU计划编写的Unixshell,它是许多Linux平台上的内定shell,它提供了用户与系统的很好的交互,对于系统运维人员,bash的地位是举足轻重的,bash编程能很快处理日常的任务 bash入门,一个最简单的bash例子 #vim hello.sh #!/bin/bash #This is the first example of the bash #echo "Hello world" 下面,我们就这个简单的bash 脚本来介绍一下

Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)

阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 总结: 我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨Bash脚本语言中的美学与哲学. 这不是一篇Bash脚本编程的教程,但是却能让人更加深入地了解Bash脚本编程,更加快速地学习Bash脚本编程. 阅读这篇随笔,不需要你有Bash编程的经验,但一定要和我一

python之字符串

字符串与文本操作 字符串: Python 2和Python 3最大的差别就在于字符串 Python 2中字符串是byte的有序序列 Python 3中字符串是unicode的有序序列 字符串是不可变的 字符串支持下标与切片 # 证明字符串支持切片和下标 In [40]: s = 'hello world!' In [41]: s[0] Out[41]: 'h' In [42]: s[0:3] Out[42]: 'hel' In [43]: s[::-1] Out[43]: '!dlrow oll

Linux江湖10:Bash脚本编程语言中的美学与哲学

我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨Bash脚本语言中的美学与哲学.这不是一篇Bash脚本编程的教程,但是却能让人更加深入地了解Bash脚本编程,更加快速地学习Bash脚本编程.阅读这篇随笔,不需要你有Bash编程的经验,但一定要和我一样热衷于探索各种编程语言的本质,感悟它们的魅力. 其实早就想写关于Bash的东西了.前几天看到有博友在院子里发学习Bash的心得(这里http://www.cnblogs.com/viroyiheng/p/3988