linux有很多命令可以对字符串进行操作,譬如awk,sed,但是在shell脚本如果能使用bash内建的操作符完成操作就尽量不要使用外部命令,因为外部命令通常都需要fork出一个单独的进程来执行,这会降低脚本执行效率;
1.获取字符串长度
$ str="hello world"
$ echo ${#str}
11
我们用awk实现同样的功能
$ str="hello world"
$ awk -v s="$str" 'BEGIN {print length(s)}' #注意$str两边的双引号不能省略
11
2.截取子串
bash语法: |
${字符串:positon} |
${字符串:positon:length} |
bash中字符串下标从0开始,若不指定长度,默认截至的最后一个字符
$ str="abcdefghijk"
$ echo "${str:2}"
cdefghijk
$ echo "${str:2:5}"
cdefg
我们用awk实现同样的功能(awk中字符串下标从1开始):
$ str="abcdefghijk"
$ awk -v s="$str" 'BEGIN {print substr(s,3)}'
cdefghijk
$ awk -v s="$str" 'BEGIN {print substr(s,3,5)}'
cdefg
3.字符串替换
bash语法: |
${字符串/pattern/replacement} #使用$replacement来替换第一个匹配的$pattern |
${字符串//pattern/replacement} #使用$replacement来替换所有匹配的$pattern |
注意:这里的pattern 支持bash通配符(不支持正则)
$ str="a1b1c1"
$ echo "${str/1/--}"
a--b1c1
$ echo "${str//1/--}"
a--b--c--
我们用awk实现同样的功能:
$ str="a1b1c1"
$ awk -v s="$str" 'BEGIN {gsub("1","--",s); print s}'
a--b--c--
关于字符串替换,还有2点要说明:
1.gsub支持正则(扩展正则),比如上面的例子我们还可以写成:
awk -v s="$str" 'BEGIN {gsub(/[0-9]+/,"--",s); print s}'
2.bash字符串替换还支持定址:
${字符串/#substring/replacement} #若substring出现在开头,则替换 |
${字符串/%substring/replacement} #若substring出现在末尾,则替换 |
$ str="ba1b1c1"
$ echo ${str/a/--}
b--1b1c1
$ echo ${str/#a/--}
ba1b1c1
分享到:
相关推荐
在Bash Shell中,字符串操作是日常脚本编写中非常常见且重要的部分。本文将对Bash Shell字符串操作进行详细的总结,包括取长度、查找位置、选取与截取子串、字符串替换以及比较和连接等方法。 1. **取长度** 取得...
1. **字符串操作**: - **删除字符串前后空格**:使用`sed`, `awk`, `perl`等工具通常会引入额外的依赖,而Bash内建命令如`tr`或`expr`可以完成同样的工作。例如,通过查找和删除字符串两端的空格,可以创建一个...
这个类库名为“Stringy”,旨在提供更加安全、高效且易于使用的字符串操作接口。 "Stringy"类库的核心特性包括但不限于以下几点: 1. **多字节支持**:Stringy针对Unicode字符串进行了优化,能够正确处理不同语言...
19. **eval** 命令:将字符串作为命令执行,常用于动态构建命令行。 20. **exec** 命令:替换当前Shell进程或改变其I/O。 21. **exit** 命令:退出Shell会话。 22. **export** 命令:将变量设置为环境变量,使其...
* `-D`:向标准输出打印一个以 $ 为前导的,以双引号引用的字符串列表。 * `-O`:设置或取消 shopt 选项的取值。 * `--`:标志选项的结束,禁止其余的选项处理。 * `--dump-po-strings`:等价于 -D,但是输出是 GNU ...
Bash执行命令的方式多种多样,包括使用内建命令、外部命令、别名或者通过函数来执行。 以上只是Bash众多特性中的一小部分,通过这些基础知识点的介绍,我们可以了解到Bash的强大功能以及如何在Linux系统中更有效地...
- **4.3 字符串操作** - 介绍如何在bash中处理字符串。 - **4.4 命令替换** - 解释命令替换的功能及其用途。 - **4.5 高级示例:pushd和popd** - 通过具体的例子展示如何使用这些命令来管理目录堆栈。 5. **...
Bash内建了一些命令,如`cd`(改变目录)、`echo`(打印文本)、`read`(从标准输入读取数据)和`source`(执行脚本中的命令,而不是创建子进程)。 十、错误处理与调试 使用`set -e`可以在遇到错误时使脚本停止...
- **-D**: 打印一个以 `$` 为前导、以双引号引用的字符串列表,用于非 C 或 POSIX 语言环境中脚本中需要翻译的字符串。此选项隐含 `-n` 选项,不会执行命令。 - **[-+]O[shopt_option]**: 设置或取消设置 `shopt` 内...
- 内建命令和外部命令的区分,以及它们在脚本中的使用。 - 外部过滤器、程序与命令的作用和用法。 - 系统命令和高级命令的介绍,如`find`、`sed`、`awk`等。 7. **高级话题** - 正则表达式的使用,它是文本匹配...
Bash支持多种赋值运算符,如`=`, `+=`, `*=`, `/=`和`%=`, 可以进行字符串和数值运算。 ### 7. 管道与重定向 管道`|`用于连接命令,将前一个命令的输出作为后一个命令的输入。重定向`>`、`和`>>`分别用于覆盖、...
在Bash中定义的变量没有类型声明,可以同时存储字符串或数值。 - **4.4 特殊的变量类型** 包括环境变量、位置参数等,这些变量在脚本执行过程中具有特殊的意义。 ##### 5. 引用 - **5.1 引用变量** 使用 `$`...
字符串长度可以通过内建的length属性来获取,该属性返回字符串中的字符数量。对于中文字符而言,一个中文字符长度等同于一个英文字符,无论使用的是UTF-8还是其他编码格式。关于计算字符串长度的简单方法,这里提到...
操作字符串 9.3. 参数替换 9.4. 指定类型的变量:declare或者typeset 9.5. 变量的间接引用 9.6. $RANDOM: 产生随机整数 9.7. 双圆括号结构 10. 循环和分支 10.1. 循环 10.2. 嵌套循环 10.3. 循环控制 ...
在这一阶段,教程深入到变量的高级用法,如内部变量、字符串操作、参数替换,以及特定类型的变量声明。还涉及到了随机数生成、双圆括号结构、循环和分支、内部命令与内建、外部命令的使用等。同时,讲解了正则表达式...
- **说明**:这些是Bash内建的功能,可以直接使用而无需调用外部程序。例如`cd`、`echo`等。 ##### 6. Command Substitution(命令替换) - **位置**:第8页 - **说明**:允许将一个命令的结果作为另一个命令的参数...
9.2. 操作字符串 9.3. 参数替换 9.4. 指定类型的变量:declare 或者typeset 9.5. 变量的间接引用 9.6. $RANDOM: 产生随机整数 9.7. 双圆括号结构 10. 循环和分支 10.1. 循环 10.2. 嵌套循环 10.3. 循环控制 10.4. ...
Bash脚本的编写需要对Shell的内建变量、自定义变量、Here Document、重定向、管道以及进程管理有一定的理解。 ### 文件查找与文本处理 Linux提供了一些用于文件查找和文本处理的工具,例如find命令和grep工具家族...