- 浏览: 4732739 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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对照) - 23.字符串替换、子串删除、子串截取
In Java
字符串替换
String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。
String replace(CharSequence target, CharSequence replacement)
使用指定的字面值替换序列替换此字符串匹配字面值目标序列的每个子字符串。
String replaceAll(String regex, String replacement)
使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。
String replaceFirst(String regex, String replacement)
使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的第一个子字符串。
子串删除
str.replace("substr_to_remove", "");
子串截取
参见 ”Bash字符串处理(与Java对照) - 21.字符串正则匹配 “ 的”字符串提取“部分。
In Bash
基于Pattern Matching的子串替换
${STR/$OLD/$NEW}
替换第一个。
${STR//$OLD/$NEW}
替换所有。
注意:不能使用正则表达式,只能使用?*的Shell扩展。只能用shell通配符如 * ? [list] [!list] [a-z]。
${STR/#$OLD/$NEW}
替换开头。如果STR以OLD串开头,则替换。
${STR/%$OLD/$NEW}
替换结尾。如果STR以OLD串结尾,则替换。
[root@jfht ~]# STR="Hello World"
[root@jfht ~]# echo ${STR/o/O}
HellO World
[root@jfht ~]# echo ${STR//o/O}
HellO WOrld
[root@jfht ~]# STR="Hello World"
[root@jfht ~]# echo ${STR/#He/he}
hello World
[root@jfht ~]# echo ${STR/#o/he}
Hello World
[root@jfht ~]# echo ${STR/%He/he}
Hello World
[root@jfht ~]# echo ${STR/%ld/lD}
Hello WorlD
如果被替换串包含/字符,那么要转义,写成\/。
[root@jfht ~]# filename="/root/admin/monitoring/process.sh"
[root@jfht ~]# echo ${filename/#\/root/\/tmp}
/tmp/admin/monitoring/process.sh
[root@jfht ~]# echo ${filename/%.*/.ksh}
/root/admin/monitoring/process.ksh
[root@jfht ~]#
将环境变量PATH的各个目录分开,每行显示一个。
echo -e ${PATH/:/\n}
[root@jfht ctmw]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/apache/apache-ant-1.7.1/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@jfht ctmw]# echo -e ${PATH//:/'\n'}
/usr/kerberos/sbin
/usr/kerberos/bin
/usr/apache/apache-ant-1.7.1/bin
/usr/local/sbin
/usr/local/bin
/sbin
/bin
/usr/sbin
/usr/bin
/root/bin
[root@jfht ctmw]# echo "${PATH//:/$'\n'}"
/usr/kerberos/sbin
/usr/kerberos/bin
/usr/apache/apache-ant-1.7.1/bin
/usr/local/sbin
/usr/local/bin
/sbin
/bin
/usr/sbin
/usr/bin
/root/bin
基于Pattern Matching的子串删除
子串删除是一种特殊的替换
${STR/$SUB}
将STR中第一个SUB子串删除
${STR//$SUB}
将STR中所有SUB子串删除
${STR#$PREFIX}
去头,从开头去除最短匹配前缀
${STR##$PREFIX}
去头,从开头去除最长匹配前缀
${STR%$SUFFIX}
去尾,从结尾去除最短匹配后缀
${STR%%$SUFFIX}
去尾,从结尾去除最长匹配后缀
注意:经常会记错#和%的含义,有一个帮助记忆的方法
看一下键盘,#在$之前,%在$之后,就知道#去头,%去尾。
注意:不能使用正则表达式,只能使用?*的Shell扩展。
[root@jfht ~]# STR="Hello World"
[root@jfht ~]# echo ${STR#He}
llo World
[root@jfht ~]# echo ${STR#He*o}
World
[root@jfht ~]# echo ${STR##He*o}
rld
[root@jfht ~]# PREFIX="*o"
[root@jfht ~]# echo ${STR#$PREFIX}
World
[root@jfht ~]# echo ${STR##$PREFIX}
rld
[root@jfht ~]# echo ${STR%o*}
Hello W
[root@jfht ~]# echo ${STR%%o*}
Hell
[root@jfht ~]# SUFFIX="o*"
[root@jfht ~]# echo ${STR%$SUFFIX}
Hello W
[root@jfht ~]# echo ${STR%%$SUFFIX}
Hell
典型应用:得到文件的扩展名
[root@jfht ~]# FILE=hello.jpg
[root@jfht ~]# echo ${FILE##*.}
jpg
使用sed命令实现正则表达式替换
使用sed命令可以进行正则表达式的替换。
echo "$STR" | sed "s/$OLD/$NEW/"
将STR中的OLD子串替换成NEW。
[root@jfht ~]# STR="123456789"
[root@jfht ~]# echo "$STR" | sed s/345/OK/
12OK6789
[root@jfht ~]# OLD=345
[root@jfht ~]# NEW=OK
[root@jfht ~]# echo "$STR" | sed "s/$OLD/$NEW/"
12OK6789
使用tr命令实现字符集合的替换
使用tr命令可以实现字符的替换,并且可以是从一批字符到另一批字符的替换。比如小写字母变成大写字母,或者反过来。
[root@jfht ~]# echo "bash" | tr "[a-z]" "[b-z]"
cbti
上面的命令是将原串中的a替换成b,被替换成c,以此类推。
网上问题:Linux中 有没有一个命令可以将 字符串中出现的 +或者- 替换成对应的-或者+ 即 "+" ——> "-" "-"——>"+" 例如 GMT+8-9变成 GMT-8+9
[root@jfht ~]# echo "GMT+8-9" | sed 's/-/#/g' | sed 's/+/-/g' | sed 's/#/+/g'
GMT-8+9
上面是网上提供的答案。如果用tr来实现,更简洁些。
[root@jfht ~]# echo "GMT+8-9" | tr "+-" "-+"
GMT-8+9
路径字符串的处理
dirname ${FULLPATH}
取目录部分。
basename ${FULLPATH}
取文件名部分。
basename ${FULLPATH} ${EXT}
取文件名部分,并且去掉指定的扩展名。
[root@jfht ~]# FULLPATH=/root/work/project/backup.tar.gz
[root@jfht ~]# dirname "$FULLPATH"
/root/work/project
[root@jfht ~]# basename "$FULLPATH"
backup.tar.gz
[root@jfht ~]# basename "$FULLPATH" .gz
backup.tar
[root@jfht ~]# basename "$FULLPATH" .tar
backup.tar.gz
[root@jfht ~]# basename "$FULLPATH" .tar.gz
backup
取目录部分:${FULLPATH%/*}
(类似 dirname "$FULLPATH")
取文件名称:FILE=${FULLPATH##*/}
(类似 basename "$FULLPATH")
取最短基本名称:${FILE%%.*}
取最长基本名称:${FILE%.*}
取最短扩展名:${FILE##*.} 或者 ${FULLPATH##*.}
取最长扩展名:${FILE#*.} 或者 ${FULLPATH#*.}
[root@jfht ~]# FULLPATH=/root/work/project/backup.tar.gz
[root@jfht ~]# echo ${FULLPATH%/*}
/root/work/project
[root@jfht ~]# dirname "$FULLPATH"
/root/work/project
[root@jfht ~]# FILE=${FULLPATH##*/}
[root@jfht ~]# echo $FILE
backup.tar.gz
[root@jfht ~]# basename "$FULLPATH"
backup.tar.gz
[root@jfht ~]# echo ${FILE%%.*}
backup
[root@jfht ~]# echo ${FILE%.*}
backup.tar
[root@jfht ~]# echo ${FILE##*.}
gz
[root@jfht ~]# echo ${FILE#*.}
tar.gz
[root@jfht ~]#
本文链接:http://codingstandards.iteye.com/blog/1164905 (转载请注明出处)
返回目录:Java程序员的Bash实用指南系列之字符串处理(目录)
上节内容:Bash字符串处理(与Java对照) - 22.判断字符串是否数字串
下节内容:Bash字符串处理(与Java对照) - 24.文件路径字符串的处理
发表评论
-
Bash字符串处理(与Java对照) - 22.判断字符串是否数字串
2011-10-25 09:25 5421Bash字符串处理(与Java对照) - 22.判断字符串是否 ... -
Bash字符串处理(与Java对照) - 21.字符串正则匹配
2011-10-24 09:07 11002Bash字符串处理(与Java对照) - 21.字符串正则匹配 ... -
Bash字符串处理(与Java对照) - 20.查找子串的位置
2011-10-19 09:14 6732Bash字符串处理(与Java对照) - 20.查找子串的位置 ... -
Bash字符串处理(与Java对照) - 19.查找字符的位置
2011-10-18 09:06 5898Bash字符串处理(与Java对照) - 19.查找字符的位置 ... -
Bash字符串处理(与Java对照) - 18.格式化字符串
2011-10-17 09:18 4923Bash字符串处理(与Java对照) - 18.格式化字符串 ... -
Bash字符串处理(与Java对照) - 17.判断是否以另外的字符串结尾
2011-10-09 08:58 6925Bash字符串处理(与Java对照) - 17.判断是否以另外 ... -
Bash字符串处理(与Java对照) - 16.判断是否以另外的字符串开头
2011-10-08 09:17 8297Bash字符串处理(与Java对照) - 16.判断是否以另外 ... -
Bash字符串处理(与Java对照) - 15.计算子串出现的次数
2011-09-28 09:37 3362Bash字符串处理(与Java对照) - 15.计算子串出现的 ... -
Bash字符串处理(与Java对照) - 14.判断是否包含另外的字符串(多达6种方法)
2011-09-27 13:22 8266Bash字符串处理(与Java对照) - 14.判断是否包含另 ... -
Bash字符串处理(与Java对照) - 13.字符串数组连接(以指定分隔符合并)
2011-09-26 09:19 5114Bash字符串处理(与Java对照) - 13.字符串数组连接 ... -
Bash字符串处理(与Java对照) - 12.字符串连接
2011-09-23 09:08 6308Bash字符串处理(与Java对照) - 12.字符串连接 ... -
Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)
2011-09-21 09:31 5644Bash字符串处理(与Java对照) - 11.比较两个字符串 ... -
Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)
2011-09-20 09:16 6836Bash字符串处理(与Java对照) - 10.判断两个字符串 ... -
Bash字符串处理(与Java对照) - 9.获取字符串指定位置的字符、遍历字符串中的字符
2011-09-19 09:13 3687Bash字符串处理(与Java对照) - 9.获取字符串指定位 ... -
Bash字符串处理(与Java对照) - 8.计算字符串长度
2011-09-16 09:20 5586Bash字符串处理(与Java对照) - 8.计算字符串长度 ... -
Bash字符串处理(与Java对照) - 7.字符串与默认值
2011-09-15 09:20 3890Bash字符串处理(与Java对照) - 7.字符串与默认值 ... -
Bash字符串处理(与Java对照) - 6.判断字符串是否为空(不为空)
2011-09-14 09:20 7151Bash字符串处理(与Java对照) - 6.判断字符串是否为 ... -
Bash字符串处理(与Java对照) - 5.字符串输入(读取字符串)
2011-09-13 09:28 3880Bash字符串处理(与Java对照) - 5.字符串输入(读取 ... -
Bash字符串处理(与Java对照) - 4.字符串输出
2011-09-08 09:30 3695Bash字符串处理(与Java对照) - 4.字符串输出 I ... -
Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值
2011-09-07 09:29 6833Bash字符串处理(与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工具类。
在Linux下使用sqlplus或者rman时,经常需要调用上次或之前运行过的命令 下载包地址: ... 地址2: ... 1. rpm -ivh rlwrap-0.42-1.el7.x86_64.rpm ...2. 检查包是否安装上 rpm -qa rlwrap ...4. 生效: source .bash_profile
修改redhat 7 bash远程执行任意代码漏洞
linux 服务器GNU Bash小于版本4.3有操作系统命令注入漏洞,需要对bash升级,下载解压 #tar zxvf bash-4.4.tar.gz #cd bash-4.4 #./configure (如果centos7编译失败,请先安装#yum install gcc) #make #make ...
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安装包