Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取

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.文件路径字符串的处理

 

 

CentOS 7 时序异常检测实战:Skyline 部署与调优指南 时序异常检测是运维监控的核心能力,其本质是通过统计建模识别偏离正常模式的数据点。原理上依赖周期性特征提取、非参数检验(如KS检验)和多算法协同决策,技术价值在于平衡召回率与误报率,尤其适用于Web服务、数据库等具有日/周周期规律的系统。典型应用场景包括CPU使用率突变、HTTP 5xx错误率飙升、数据库连接池耗尽等静态阈值失效问题。本文聚焦于资源受限、无外网环境下的 CentOS 7 Minimal 系统,详解 Skyline 这一轻量级、纯Python、Redis驱动的实时异常检测方案的落地实践,涵盖部署 阅读详情

相关推荐

Windows下玩转DeepSeek-R1:Ollama+Docker配置RAGFlow的3种网络调试方案

本文详细介绍了在Windows环境下使用Ollama和Docker配置RAGFlow的三种网络调试方案,帮助开发者解决本地部署AI知识库系统时的网络隔离问题。通过host.docker.internal直连、自定义Docker网桥网络和端口映射与反向代理三种方法,实现DeepSeek-R1模型与RAGFlow的高效通信,提升本地AI应用的开发效率。

weixin_28347369的博客 247

操作字符串之子串替换-14-${string/#substring/replacement}

操作字符串之子串替换-14-${string/#substring/replacement}

z19861216的博客 342

全新RGB-D及平面法线数据集DIODE

丰田工业大学联合芝加哥大学和北航发布全新RGB-D及平面法线数据集 DIODE (Dense Indoor and Outdoor DEpth)。

qq_43477338的博客 1539

linux shell 字符串替换字符,关于bash:在shell脚本中替换另一个字符串的一个子字符串...

我有"我爱苏西并结婚",我想把"苏西"改成"萨拉"。#!/bin/bashfirstString="I love Suzi and Marry"secondString="Sara"# do something...结果必须如下:firstString="I love Sara and Marry"要用给定的字符串替换模式的第一个匹配项,请使用${parameter/pattern/string}...

weixin_39911998的博客 903

告别理论!手把手教你用Vivado 2020.2为ZYNQ PL端打造一个AXI4-Full读写DDR的IP核

本文详细介绍了如何使用Vivado 2020.2为ZYNQ PL端创建AXI4-Full主控IP核,实现高效读写DDR内存的实战指南。通过环境配置、IP核创建、系统集成到软件调试的全流程讲解,帮助开发者快速掌握AXI4-Full协议在ZYNQ平台上的应用,提升PL与PS协同工作的数据传输效率。

weixin_30300225的博客 466

基于STM32F103C8T6的红外循迹避障小车

编程思路:控制核心板IO口的电平(即电机驱动模块的AIN1,AIN2,BIN1,BIN2)从而控制AO1、AO2、BO1、BO2的电平高低,进而控制电机使其正转、反转、不转。由于单纯地拉高拉低电平只能让电机在转与不转的状态切换,故决定利用TIM4的两个通道分别产生两路PWM信号来控制电机速度,四个电机两个一组,同一侧的两个连接在同一个PWM上。(#include "dianji.h"文件中同时写了对循迹模块引脚的初始化)

weixin_48743503的博客 1万+

Bash字符串操作

原文:Bash Tutorial => Replace pattern in string Replace pattern in string Example# First match: $ a='I am a string' $ echo "${a/a/A}" I Am a string All matches: $ echo "${a//a/A}" I Am A string Match at the beginning: $ echo "${a/#I/y}" y

陨石䧛的天际 175

音频DSP开发中的‘隐藏关卡’:那些SigmaStudio未公开的模块计算秘籍

本文深入探讨音频DSP开发中SigmaStudio未公开的模块计算秘籍,重点解析动态范围控制、均衡器参数映射和混响算法优化等核心模块计算公式。通过实际案例揭示如何利用这些非官方技巧提升音频质量与系统性能,为ADI DSP开发者提供宝贵的实战经验。

water的专栏 911

String的几种replace()方法

String 和 StringBuilder中都有replace方法,今天我们来看看。 String: String replace(char oldChar, char newChar) 用新字符newChar 替换所有的 旧字符oldChar 。 String replace(CharSequence target, CharSequence replacement) 用新字符串rep...

小码哥222的博客 10万+

JavaFX 概述

要从 JavaFX 中充分受益,了解 JavaFX 的设计方式以及对 JavaFX 包含的功能有一个很好的概述是很有用的。本文的目的是为您提供 JavaFX 概述。本文将首先介绍一般的 JavaFX 设计,然后介绍 JavaFX 中的各种特性。如果您熟悉 Flash/Flex,您会发现 JavaFX 在某种程度上受到了 Flash/Flex 的启发。JavaFX 中也有一些相同的想法。一般来说,JavaFX 应用程序包含一个或多个对应于窗口的阶段。每个阶段都有一个场景。

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 407

22、忆阻器、忆阻系统及其神经形态应用综述

本文综述了忆阻器与忆阻系统的理论基础及其在神经形态系统中的广泛应用。从忆阻器的基本定义出发,介绍了其在非线性电路、存储技术、通信和神经形态计算等领域的应用潜力。重点探讨了基于忆阻器的神经元模型(如Hodgkin-Huxley、FitzHugh-Nagumo和Hindmarsh-Rose模型)、突触实现方式及多种忆阻神经网络架构,包括细胞神经网络、脉冲神经网络和递归神经网络等。此外,深入分析了忆阻器在水库计算中的理论研究与硬件实现进展,展示了其在时间序列处理、模式识别和信号预测等方面的优异性能。尽管忆阻技术前

kiwi8的博客 207

Bash 字符串操作示例-长度,子串,查找和替换

In bash shell, when you use a dollar sign followed by a variable name, shell expands the variable with its value. This feature of shell is called p...

chuilizhan6639的博客 292

[网络安全提高篇] 一二〇.恶意软件动态分析经典沙箱Cape批量提取动态API特征

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文详细介绍动态分析沙箱Cape的安装过程,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。然而,当样本数量增加时,单个样本分析会降低效率。这篇文章将讲解如何实现Cape沙箱的批量分析,通过调用Python脚本文件来实施批量处理,并将分析结果存储在指定位置,最后补充submit.py的参数及Python调用方式。基础性文章,希望对您有帮助!

杨秀璋的专栏 4121

java 字符串截取替换_Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取...

Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取In Java字符串替换?String ??? replace(char oldChar, char newChar)????????? 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。?String ??? replace(CharSequence target, C...

weixin_39601641的博客 168

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java程序员的Bash实用指南系列之字符串处理(目录)

Java程序员的Bash实用指南系列之字符串处理(目录) 文章   在一般的计算机编程语言中,字符串处理是很重要的一块,Bash也是如此,如果掌握了字符串的处理,基本上就能够应付大部分的编程工作了。在Unix/Linux操作系统中,很多时候需要使用多个命令一起配合才能完成一个较复杂的任务,Shell提供了管道线、重定向、结构化编程等方式,把这些命令粘合在一起。因此,命令之间的接口数据的处理

Nicholas的专栏 QQ1295794532 1139

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

shell简单了解

Linux相关 /proc/$PID:表示进程的文件 /dev/null:垃圾箱,黑洞 shell内部构造 变量:变量分为:局部变量,环境变量,shell变量。 shell变量:一部分是局部变量,一部分是环境变量,对shell很重要。比如:IFS,PS1是局部shell变量 环境变量使用export进行导出,环境变量可以让子进程继承 .bashrc:在每次创建bash进程时会执行一次 ...

charvl的博客 316

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Java入门到精通】*基础篇

Java入门教程摘要(1-6期) 本系列从零讲解Java,基于Java 8 LTS版本。 Java历史与特性:1995年Sun公司发布,以跨平台、面向对象为核心优势,应用于后端、安卓、大数据等领域。 跨平台原理:通过JVM将字节码转换为机器码,实现"一次编写,到处运行"。 环境组件:JDK(开发工具包)⊃ JRE(运行环境)⊃ JVM(虚拟机),开发需安装JDK。 安装配置:提供Windows/Mac的JDK安装指南,强调路径无中文/空格。 环境变量:设置JAVA_HOME指向JDK路径,Path添加bin

2301_81248642的博客 930

JB2-3-MySQL(一)

关系型DB,存储引擎,组织架构,MySQL容器,可视化工具,导入导出表格,DDL用户,DCL权限,DDL三范式,DDL表格,DDL临时表,DML操作,DDL约束,DQL查询(排序,条件,模糊,正则,范围,分页,分组,子查询,联表,并集),DQL函数(数学,日期,字符,自定义)等。

周航宇的博客 3597

java中字符串替换的4种方法

在日常开发中,我们对字符串的操作非常频繁,今天我总结了一下字符串替换常用的4种方式,这里再强调下字符串是不可变的,进行字符串替换后记得赋值。本文归纳总结了几种常见的Java字符串替换方法,根据具体需求选择适合的方法即可。

sky2019116的博客 3万+

Java字符串替换的方法

java中字符串替换方法主要有三种,分别是replace()、replaceAll()和replaceFirst(),这三种方法可以在三种不同情况应用,下面就由我来具体说明这三种方法的应用情况吧。replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串)

zhanchulan的博客 1万+

Java中字符串替换的4种方法

在Java编程中,字符串的替换操作是非常常见的,尤其是当我们需要处理文本数据时。本文将介绍Java中实现字符串替换的四种常用方法,并通过代码示例来展示每种方法的用法。

linzhongshu的专栏 1万+

java 字符串替换

文章目录字符串替换方法Java字符串替换指定位置的字符 字符串替换方法 在Java 中,String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll() replace() 方法 replace()方法用于将目标字符串中的指定字符(串)替换成新的字符(串)replace(String oldChar, String newChar) replaceFirst() 方法 replaceFirst()方法用于将目标字符串中匹配某正则表达

liuerchong的博客 4万+

Java中的字符串替换

在Java中,String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll(),下面我们就来详细看一下三种的用法!下面这套视频专门为零基础而制,适合准备入行Java开发的零基础,视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂,由浅入深。不仅适用于零基础的初学者,有经验的程序员也可做巩固学习。

m0_64363449的博客 6732

Java中字符串替换的方法

在某些情况下,可能需要实现自定义的字符串替换逻辑。例如,根据特定的规则替换字符串中的内容。Java 提供了多种实现字符串替换的方法,包括String类的replacereplaceAll和方法,以及使用或类。此外,还可以使用自定义方法或第三方库来实现更复杂的字符串替换功能。选择合适的方法取决于具体的需求和场景。

C_V_Better的博客 2897

shell(bash)替换字符串大全

shell(bash)替换字符串大全 1 .替换(只替换一个) varrB=${varA/str1/str2} $ var="AAAszip_BBB.zip";var2=${var/zip/ZIP};echo $var2}; AAAsZIP_BBB.zip $ var="AAAszip_BBB.zip";var2=${var/.zip/.ZIP};echo $var2; AAAszip_BBB.ZIP 替换(替换所有) varB=${varA//str1/str2} $ var="AAAszip_BBB.

coraline1991的专栏 1万+
上一篇: MongoDB下查询数组的尝试记录
下一篇: MongoDB测试计划.分八种情况进行
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值