- 浏览: 4752574 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
bzhao:
你也应该可以这样:(not tested)./rbtunnel ...
在Bash脚本中怎么关闭文件描述符? -
bzhao:
如果有A进程原代码情况下,通过如下调用,把他的子进程继承关闭则 ...
在Bash脚本中怎么关闭文件描述符? -
Master-Gao:
楼主咋没分析下源码呢?
我使用过的Linux命令之dirname - 截取给定路径的目录部分 -
jiedushi:
tail -F 就可以吧
Linux下实时跟踪log4j日志文件的bash脚本 - 增强了tail -f的功能 -
java_is_new:
新手学习了,就是不明白为一个网卡配多个ip有什么用
我使用过的Linux命令之ifconfig - 网络配置命令
Bash字符串处理(与Java对照) - 26.根据位置和长度截取子串
In Java
String.substring
String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
In Bash
Bash内置的取子串功能
取指定位置开始到串尾的子串,INDEX从0开始算。
${STR:$INDEX}
取指定位置开始、指定长度的子串
${STR:$INDEX:$LENGTH}
与Java不同的是,LENGTH可以大于串的长度。
[root@jfht ~]# STR=Hello
[root@jfht ~]# echo ${STR:3}
lo
[root@jfht ~]# echo ${STR:1:2}
el
[root@jfht ~]# echo ${STR:2:10}
llo
另外, INDEX还可以是负数,意思是从尾部倒数的位置开始。
但是要注意INDEX的写法,加上小括号,或者在前面加空格或0。
[root@jfht ~]# STR=Hello
[root@jfht ~]# echo ${STR:(-2)}
lo
[root@jfht ~]# echo ${STR:(-3)}
llo
[root@jfht ~]# echo ${STR:-3}
Hello
-3没有加小括号或前面加空格,就会产生问题。
[root@jfht ~]# echo ${STR: -3}
llo
[root@jfht ~]# echo ${STR:(-3):2}
ll
[root@jfht ~]# STR=123456789
有文章说也可以在前面加0,试了一下果然可以。
[root@jfht ~]# echo ${STR:0-4}
6789
[root@jfht ~]# echo ${STR:0-4:3}
678
补充对${STR:-3}的说明。
Use Default Values. If parameter is unset or null, the expansion of word is substituted. Otherwise,
the value of parameter is substituted.
使用expr substr取子串
另外也有用expr来取子串的,但效率不如上面。
expr substr "$STR" "$POS" "$LENGTH"
注意:POS从1开始。
substring of STRING, POS counted from 1
[root@jfht ~]# STR=Hello
[root@jfht ~]# expr substr "$STR" 2
expr: 语法错误
[root@jfht ~]# expr substr "$STR" 2 1
e
[root@jfht ~]# expr substr "$STR" 2 3
ell
[root@jfht ~]# expr substr "$STR" 2 10
ello
使用expr正则表达式匹配功能也可以实现取子串,不过有点杀鸡用牛刀了。
[root@jfht ~]# STR=123456789
[root@jfht ~]# POS=3
[root@jfht ~]# LEN=4
[root@jfht ~]# expr match "$STR" ".\{$POS\}\(.\{$LEN\}\).*"
4567
用cut命令截取子串
用cut命令也可以进行字符串截取。
echo "$STR" | cut -c$START-$END
截取STR串中从START开始到END结束的子串,位置从1开始计数。
echo "$STR" | cut -c$START-
截取STR串中从START开始到末尾的子串。
echo "$STR" | cut -c-$END
截取STR串中从头开始到END的子串。
[root@jfht ~]# STR=123456789
[root@jfht ~]# echo "$STR" | cut -c3-4
34
[root@jfht ~]# START=3
[root@jfht ~]# END=4
[root@jfht ~]# echo "$STR" | cut -c$START-$END
34
[root@jfht ~]# echo "$STR" | cut -c$START-
3456789
[root@jfht ~]# echo "$STR" | cut -c-$END
1234
用awk substr截取子串
用awk命令来进行字符串截取,网上很多例子有错。
echo "$STR" | awk '{print substr($0,'$POS','$LEN')}'
echo | awk '{print substr("'"$STR"'",'$POS','$LEN')}'
截取STR的POS开始长度LEN的子串,POS从1开始算。
[root@jfht ~]# STR=123456789
[root@jfht ~]# echo "$STR" | awk '{print substr($0,3,4)}'
3456
[root@jfht ~]# POS=3
[root@jfht ~]# LEN=4
[root@jfht ~]# echo "$STR" | awk '{print substr($0,'$POS','$LEN')}'
3456
[root@jfht ctmw]# STR="123 456 789"
[root@jfht ctmw]# POS=3
[root@jfht ctmw]# LEN=4
[root@jfht ctmw]# echo "$STR" | awk '{print substr($0,'$POS','$LEN')}'
3 4
[root@jfht ctmw]# echo | awk '{print substr("'"$STR"'",'$POS','$LEN')}'
3 4
[root@jfht ctmw]#
使用dd命令截取子串
用dd命令来进行字符串截取。
echo "$STR" | dd bs=1 skip=$POS count=$LEN 2>/dev/null
截取STR的POS开始长度LEN的子串,POS从0开始算。
Both read and write BYTES bytes at a time.
`skip=BLOCKS'
Skip BLOCKS `ibs'-byte blocks in the input file before copying.
`count=BLOCKS'
Copy BLOCKS `ibs'-byte blocks from the input file, instead of
everything until the end of the file.
[root@jfht ~]# STR=123456789
[root@jfht ~]# echo "$STR" | dd bs=1 skip=3 count=4
45674+0 records in
4+0 records out
4 bytes (4 B) copied, 6.553e-05 seconds, 61.0 kB/s
[root@jfht ~]# echo "$STR" | dd bs=1 skip=3 count=4 2>/dev/null
4567[root@jfht ~]# POS=3
[root@jfht ~]# LEN=4
[root@jfht ~]# echo "$STR" | dd bs=1 skip=$POS count=$LEN 2>/dev/null
4567[root@jfht ~]#
本文链接:http://codingstandards.iteye.com/blog/1164911 (转载请注明出处)
返回目录:Java程序员的Bash实用指南系列之字符串处理(目录)
上节内容:Bash字符串处理(与Java对照) - 25.字符串分割(成数组)
下节内容:Bash字符串处理(与Java对照) - 27.转换大小写
发表评论
-
Bash字符串处理(与Java对照) - 22.判断字符串是否数字串
2011-10-25 09:25 5497Bash字符串处理(与Java对照) - 22.判断字符串是否 ... -
Bash字符串处理(与Java对照) - 21.字符串正则匹配
2011-10-24 09:07 11073Bash字符串处理(与Java对照) - 21.字符串正则匹配 ... -
Bash字符串处理(与Java对照) - 20.查找子串的位置
2011-10-19 09:14 6832Bash字符串处理(与Java对照) - 20.查找子串的位置 ... -
Bash字符串处理(与Java对照) - 19.查找字符的位置
2011-10-18 09:06 5950Bash字符串处理(与Java对照) - 19.查找字符的位置 ... -
Bash字符串处理(与Java对照) - 18.格式化字符串
2011-10-17 09:18 5011Bash字符串处理(与Java对照) - 18.格式化字符串 ... -
Bash字符串处理(与Java对照) - 17.判断是否以另外的字符串结尾
2011-10-09 08:58 6996Bash字符串处理(与Java对照) - 17.判断是否以另外 ... -
Bash字符串处理(与Java对照) - 16.判断是否以另外的字符串开头
2011-10-08 09:17 8412Bash字符串处理(与Java对照) - 16.判断是否以另外 ... -
Bash字符串处理(与Java对照) - 15.计算子串出现的次数
2011-09-28 09:37 3428Bash字符串处理(与Java对照) - 15.计算子串出现的 ... -
Bash字符串处理(与Java对照) - 14.判断是否包含另外的字符串(多达6种方法)
2011-09-27 13:22 8344Bash字符串处理(与Java对照) - 14.判断是否包含另 ... -
Bash字符串处理(与Java对照) - 13.字符串数组连接(以指定分隔符合并)
2011-09-26 09:19 5197Bash字符串处理(与Java对照) - 13.字符串数组连接 ... -
Bash字符串处理(与Java对照) - 12.字符串连接
2011-09-23 09:08 6368Bash字符串处理(与Java对照) - 12.字符串连接 ... -
Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)
2011-09-21 09:31 5732Bash字符串处理(与Java对照) - 11.比较两个字符串 ... -
Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)
2011-09-20 09:16 6927Bash字符串处理(与Java对照) - 10.判断两个字符串 ... -
Bash字符串处理(与Java对照) - 9.获取字符串指定位置的字符、遍历字符串中的字符
2011-09-19 09:13 3750Bash字符串处理(与Java对照) - 9.获取字符串指定位 ... -
Bash字符串处理(与Java对照) - 8.计算字符串长度
2011-09-16 09:20 5685Bash字符串处理(与Java对照) - 8.计算字符串长度 ... -
Bash字符串处理(与Java对照) - 7.字符串与默认值
2011-09-15 09:20 3969Bash字符串处理(与Java对照) - 7.字符串与默认值 ... -
Bash字符串处理(与Java对照) - 6.判断字符串是否为空(不为空)
2011-09-14 09:20 7226Bash字符串处理(与Java对照) - 6.判断字符串是否为 ... -
Bash字符串处理(与Java对照) - 5.字符串输入(读取字符串)
2011-09-13 09:28 3951Bash字符串处理(与Java对照) - 5.字符串输入(读取 ... -
Bash字符串处理(与Java对照) - 4.字符串输出
2011-09-08 09:30 3757Bash字符串处理(与Java对照) - 4.字符串输出 I ... -
Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值
2011-09-07 09:29 6897Bash字符串处理(与Java ...
相关推荐
### Shell中字符串截取 在Shell脚本编程中,对字符串进行截取是常见的操作之一。通过对字符串的处理,可以实现各种数据解析、文件名提取等实用功能。本文将详细介绍几种常用的Shell中字符串截取方法及其应用场景。 ...
### Shell中的字符串处理方法 #### 引言 在Shell编程中,字符串...无论是简单的字符串截取还是更复杂的文本分析任务,这些技巧都能提供强大的支持。希望本文介绍的内容能帮助你在日常的Shell编程工作中更加得心应手。
子字符串截取** - **${string:position}**: 从指定位置开始截取字符串。 - 示例: ```bash str="Hello World" echo "${str:6}" # 输出: World ``` - **${string:position:length}**: 从指定位置开始截取指定...
本文将对Bash Shell字符串操作进行详细的总结,包括取长度、查找位置、选取与截取子串、字符串替换以及比较和连接等方法。 1. **取长度** 取得字符串长度有两种方式。第一种是使用`expr length`命令,如`expr ...
- `substring`可通过`${字符串:开始位置[:长度]}`截取子串。 - `${#变量名}`返回字符串长度,`expr index "$字符串" 字符`查找子串位置。 9. **正则表达式** - 使用`=~`操作符在`[[ ... ]]`条件测试中进行正则...
Shell提供了多种字符串截取方式,如 `${string:offset:length}` 或 `${string: -offset:length}`。例如: ```bash echo ${string:4} # 2342341 从第4位开始截取 echo ${string:3:3} # 123 从第3位开始截取3位 ...
字符串测试运算是用于处理字符串的比较和检查。主要的字符串测试运算包括: - `=`:两个字符串完全相等 - `!=`:两个字符串不相等 - `-z`:字符串长度为0(空字符串) - `-n`:字符串长度不为0(非空字符串) 示例...
3. **截取与修剪**:`kstr` 提供了 `substring` 和 `slice` 方法用于截取字符串,以及 `trim`、`trimStart` 和 `trimEnd` 方法用于去除字符串两端的空白字符。 4. **编码与解码**:支持常见的字符串编码和解码操作...
1. **函数库**: Bash Toolbox 包含了各种预定义的函数,如文件操作、字符串处理、数学计算等,这些函数经过优化,能够提高脚本的可读性和执行效率。 2. **错误处理**: 该项目强调良好的错误处理机制,提供统一的...
#### 2.4 字符串截取 可以使用`${string%%suffix}`或`${string##prefix}`来去除字符串的前缀或后缀。例如: ```bash str="http://www.example.com" echo "${str##*/}" # 输出:example.com ``` #### 2.5 变量状态...
- **截取子字符串**:`echo ${test:起始位置:长度}`,例如`echo ${test:5:10}`可以截取从第五个字符开始的10个字符。 - **字符串删除**: - `${test#模式}`:从字符串左侧开始删除匹配`模式`的第一个部分。 - `${...
2. 字符串处理:Shell脚本中常常需要处理字符串,例如获取字符串长度、字符串切片、替换字符串、截取子串等。Shell提供了丰富的字符串操作功能。 3. 表达式与运算符:Shell脚本支持条件表达式、比较符(包括整数...
- **Substr(字符串, 开始位置, 截取数量)**: 截取字符串的一部分。 2. **数字函数** - **Round(数字, 保留小数点后位数)**: 对数字进行四舍五入。 - **Trunc(数字, 保留小数点后位数)**: 舍去数字的小数部分。 ...
2.4 字符串截取 `VAR=${VAR:start:end}` 截取 `VAR` 从索引 `start` 到 `end-1` 的子串。 2.5 变量状态赋值 通过 `${VAR+value}` 和 `${VAR:-value}` 分别表示如果 `VAR` 已定义则输出 `VAR` 的值,否则输出 `value...
总的来说,Robot Framework String 库提供了丰富的字符串处理功能,可以帮助我们在自动化测试中进行字符串的清理、截取等操作。同时,对于遇到的编码和库安装问题,也提供了相应的解决策略。通过熟练掌握这些知识,...
此外,笔记还介绍了如何使用`cut`命令进行更复杂的字符串截取,这对于处理多列数据文件尤其方便。 除了上述内容,笔记还可能涉及更多章节,如条件语句(if-else)、循环结构(for, while)、函数定义、错误处理、...
通过使用特定的语法结构,如`${}`、`##`和`%%`,我们可以对变量进行各种操作,比如字符串截取、替换等。这些操作可以帮助我们更灵活地控制数据流,实现更复杂的脚本逻辑。 #### 变量扩展与模式匹配 在Shell中,变量...