- 浏览: 4733624 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 5427Bash字符串处理(与Java对照) - 22.判断字符串是否 ... -
Bash字符串处理(与Java对照) - 21.字符串正则匹配
2011-10-24 09:07 11010Bash字符串处理(与Java对照) - 21.字符串正则匹配 ... -
Bash字符串处理(与Java对照) - 20.查找子串的位置
2011-10-19 09:14 6735Bash字符串处理(与Java对照) - 20.查找子串的位置 ... -
Bash字符串处理(与Java对照) - 19.查找字符的位置
2011-10-18 09:06 5902Bash字符串处理(与Java对照) - 19.查找字符的位置 ... -
Bash字符串处理(与Java对照) - 18.格式化字符串
2011-10-17 09:18 4928Bash字符串处理(与Java对照) - 18.格式化字符串 ... -
Bash字符串处理(与Java对照) - 17.判断是否以另外的字符串结尾
2011-10-09 08:58 6931Bash字符串处理(与Java对照) - 17.判断是否以另外 ... -
Bash字符串处理(与Java对照) - 16.判断是否以另外的字符串开头
2011-10-08 09:17 8302Bash字符串处理(与Java对照) - 16.判断是否以另外 ... -
Bash字符串处理(与Java对照) - 15.计算子串出现的次数
2011-09-28 09:37 3369Bash字符串处理(与Java对照) - 15.计算子串出现的 ... -
Bash字符串处理(与Java对照) - 14.判断是否包含另外的字符串(多达6种方法)
2011-09-27 13:22 8269Bash字符串处理(与Java对照) - 14.判断是否包含另 ... -
Bash字符串处理(与Java对照) - 13.字符串数组连接(以指定分隔符合并)
2011-09-26 09:19 5119Bash字符串处理(与Java对照) - 13.字符串数组连接 ... -
Bash字符串处理(与Java对照) - 12.字符串连接
2011-09-23 09:08 6315Bash字符串处理(与Java对照) - 12.字符串连接 ... -
Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)
2011-09-21 09:31 5648Bash字符串处理(与Java对照) - 11.比较两个字符串 ... -
Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)
2011-09-20 09:16 6845Bash字符串处理(与Java对照) - 10.判断两个字符串 ... -
Bash字符串处理(与Java对照) - 9.获取字符串指定位置的字符、遍历字符串中的字符
2011-09-19 09:13 3694Bash字符串处理(与Java对照) - 9.获取字符串指定位 ... -
Bash字符串处理(与Java对照) - 8.计算字符串长度
2011-09-16 09:20 5596Bash字符串处理(与Java对照) - 8.计算字符串长度 ... -
Bash字符串处理(与Java对照) - 7.字符串与默认值
2011-09-15 09:20 3895Bash字符串处理(与Java对照) - 7.字符串与默认值 ... -
Bash字符串处理(与Java对照) - 6.判断字符串是否为空(不为空)
2011-09-14 09:20 7158Bash字符串处理(与Java对照) - 6.判断字符串是否为 ... -
Bash字符串处理(与Java对照) - 5.字符串输入(读取字符串)
2011-09-13 09:28 3886Bash字符串处理(与Java对照) - 5.字符串输入(读取 ... -
Bash字符串处理(与Java对照) - 4.字符串输出
2011-09-08 09:30 3699Bash字符串处理(与Java对照) - 4.字符串输出 I ... -
Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值
2011-09-07 09:29 6838Bash字符串处理(与Java ...
相关推荐
bash-3.1-MSYS-1.0.11-snapshot.tar.bz2 ffmpeg 安装用包!
在centos6或rhel6 操作系统安装bash-completion-2.1-6.el7.noarch.rpm后,重启即生效
离线安装包,测试可用
libguestfs-bash-completion-1.40.2-28.module_el8.5.0+821+97472045.noarch(1).rpm官方离线安装包,亲测可用
openjdk-18.0.1.1(openjdk-18.0.1.1_linux-x64_bin.tar.gz)适用于Linux x64 系统:
-bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...
git-bash.exe
bash-4.1.2-9.el6_2.i686.rpm是centos工具类。
修改redhat 7 bash远程执行任意代码漏洞
在Linux下使用sqlplus或者rman时,经常需要调用上次或之前运行过的命令 下载包地址: ... 地址2: ... 1. rpm -ivh rlwrap-0.42-1.el7.x86_64.rpm ...2. 检查包是否安装上 rpm -qa rlwrap ...4. 生效: source .bash_profile
#tar zxvf bash-4.4.tar.gz #cd bash-4.4 #./configure (如果centos7编译失败,请先安装#yum install gcc) #make #make install 添加环境变量 #echo‘ export PATH=/usr/local/bin:$PATH‘ >>/etc/profile #source...
redhat bash漏洞补丁包含文件:bash-4.1.2-15.el6_5.2.i686.rpmbash-4.1.2-15.el6_5.2.x86_64.rpmbash-3.0-27.el4.i386.rpmbash-3.0-27.el4.x86_64.rpmbash-3.2-33.el5_11.4.i386.r... redhat bash漏洞补丁 包含文件...
修复bash远程执行漏洞,支持redhat linux 64位操作系统 CVE-2014-6271
aix 操作系统bash工具bash-3.2-2.aix6.1.ppc.rpm,aix 5及6、7均支持
修复redhat6 bash远程执行任意代码漏洞CVE-2014-6271
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
命令补全 Centos6/7或Rhel6/7 安装 bash-completion-2.1-6.el7.noarch.rpm 后重启即生效
网上有很多bash补丁下载,但都是x86_64架构的,针对i686的下载很少,bash-4.1.2-15.el6_5.2.src.rpm 也很难下载,希望上传的这个bash-4.1.2-15.el6_5.2.i686.rpm对你有用。
AIX-6系统的bash-5安装包
.git-completion.bash