Bash字符串处理(与Java对照) - 20.查找子串的位置

Bash字符串处理(与Java对照) - 20.查找子串的位置

In Java

String.indexOf

 int     indexOf(String str)
          返回第一次出现的指定子字符串在此字符串中的索引。
 int     indexOf(String str, int fromIndex)
          从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。

 

 int     lastIndexOf(String str)
          返回在此字符串中最右边出现的指定子字符串的索引。
 int     lastIndexOf(String str, int fromIndex)
          从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。

 

StringUtils.indexOf & StringUtils.lastIndexOf

static int     indexOf(String str, String searchStr)
          Finds the first index within a String, handling null.
static int     indexOf(String str, String searchStr, int startPos)
          Finds the first index within a String, handling null.
static int     indexOfAny(String str, String[] searchStrs)
          Find the first index of any of a set of potential substrings.
static int     indexOfIgnoreCase(String str, String searchStr)
          Case in-sensitive find of the first index within a String.
static int     indexOfIgnoreCase(String str, String searchStr, int startPos)
          Case in-sensitive find of the first index within a String from the specified position.
static int     lastIndexOf(String str, String searchStr)
          Finds the last index within a String, handling null.
static int     lastIndexOf(String str, String searchStr, int startPos)
          Finds the first index within a String, handling null.
static int     lastIndexOfAny(String str, String[] searchStrs)
          Find the latest index of any of a set of potential substrings.
static int     lastIndexOfIgnoreCase(String str, String searchStr)
          Case in-sensitive find of the last index within a String.
static int     lastIndexOfIgnoreCase(String str, String searchStr, int startPos)
          Case in-sensitive find of the last index within a String from the specified position.
static int     lastOrdinalIndexOf(String str, String searchStr, int ordinal)
          Finds the n-th last index within a String, handling null.
static int     ordinalIndexOf(String str, String searchStr, int ordinal)
          Finds the n-th index within a String, handling null.

 

In Bash

使用遍历字符串的方法来查找子串的位置

函数:strstr <str> <sub>

如果找到,打印位置,从0开始计数,退出码为0;否则,打印-1,退出码为1

strstr(){
   declare -i i n2=${#2} n1=${#1}-n2
   #echo $i $n1 $n2
   for ((i=0; i<n1; ++i)){
      if [ "${1:i:n2}" == "$2" ]; then
         echo $i
         return 0
      fi
   }
   echo -1
   return 1
}

 

[root@web ~]# STR=123456789
[root@web ~]# SUB=567
[root@web ~]# strstr "$STR" "$SUB"
4
[root@web ~]#

 

使用awk index来查找子串的位置

索引位置从1开始计数,0表示没有找到。

格式:awk -v "STR=$STR" -v "SUB=$SUB" '{print index(STR,SUB)}' <<<""

格式:echo | awk -v "STR=$STR" -v "SUB=$SUB" '{print index(STR,SUB)}'

 

[root@web ~]# STR=123456789
[root@web ~]# SUB=456
[root@web ~]# awk -v "STR=$STR" -v "SUB=$SUB" '{print index(STR,SUB)}' <<<""
4
[root@web ~]# echo | awk -v "STR=$STR" -v "SUB=$SUB" '{print index(STR,SUB)}'
4
[root@web ~]#

 

使用expr match来查找子串的最后出现位置

注意:expr index不能用来查找子串的位置。

格式1:expr "$STR" : ".*$SUB" - length "$SUB"

格式2:expr match "$STR" ".*$SUB" - length "$SUB"

如果STR包含SUB串,返回最后一次出现的位置(从1开始算)。因为正则表达式采用贪婪匹配方式,所以相当于lastIndexOf。如果没有找到,打印<=0的值。

 

[root@jfht ~]# STR="Hello World"
[root@jfht ~]# SUB=or
[root@jfht ~]# expr "$STR" : ".*$SUB"
9
[root@jfht ~]# expr "$STR" : ".*$SUB" - length "$SUB"
7
[root@jfht ~]# expr match "$STR" ".*$SUB" - length "$SUB" 
7

[root@jfht ~]# SUB=xx
[root@jfht ~]# expr "$STR" : ".*$SUB" - length "$SUB"
-2
[root@jfht ~]# expr match "$STR" ".*$SUB" - length "$SUB"
-2

[root@jfht ~]# SUB=o
[root@jfht ~]# expr "$STR" : ".*$SUB" - length "$SUB"   
7
[root@jfht ~]# expr match "$STR" ".*$SUB" - length "$SUB"
7

 

 

本文链接:http://codingstandards.iteye.com/blog/1199992   (转载请注明出处)

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

上节内容:Bash字符串处理(与Java对照) - 19.查找字符的位置

下节内容:Bash字符串处理(与Java对照) - 21.字符串(正则)匹配

 

 

 

ESP32+MAX7219二进制时钟设计与嵌入式时间映射实践 二进制时钟是嵌入式系统中数据表示与物理呈现深度耦合的典型范例,其核心在于将时间语义(年月日时分秒)解构为比特位,并通过LED点阵的空间权重布局实现直观识别。该设计依托RTC模块提供时间基准,依赖SPI协议完成微控制器与专用驱动芯片(如MAX7219)的可靠通信,涉及寄存器级配置、位图坐标变换、软硬件时序对齐等关键原理。技术价值体现在低资源占用下的高可读性人机交互,适用于教学演示、极客项目及嵌入式UI原型开发。本文聚焦ESP32平台在MicroPython环境下,结合MAX7219驱动8×8点阵实现高可靠性二 阅读详情

相关推荐

基于51单片机语音识别智能台灯设计

智能台灯;语音识别;STC89C52RC单片机

Benso_H的博客 5842

An A-Z Index of the Bash command line for Linux.摘自https://ss64.com

An A-Z Index of the Bash command line for Linux. alias Create an alias • apropos Search Help manual pages (man -k) apt-get Search for and install software packages (Debian/Ubuntu) aptitu

shannonwu_的博客 1886

华为防火墙 策略路由实现多ISP接入Internet

PC3上网访问Server1时走ISP1。PC4上网访问Server1时走ISP2。1、配置接口IP并加入相应的安全区域。二、ISP2 运营商 R2路由器。一、ISP1 运营商 R1路由器。

一直被模仿,从未被超越 3014

linux+shell+字符分割字符串函数,Linux Bash Shell字符串分割substring等(转)

原文https://blog.csdn.net/wuyinggui10000/article/details/52779364脚本开发中遇到的问题是:原java中的字符串分割操作(substring indexOf等)不知道怎么处理(比如/a/b/c/d.txt我想知道文件的名称)查询相关资料得知,shell中可以采用标识符来做分割字符串,包括substring(0,index)和substrin...

weixin_32645721的博客 745

iTerm2+oh-my-zsh最全配置

iTerm2+oh-my-zsh最全配置安装前先看效果图一.安装[iTem2](https://iterm2.com/)二.安装[oh-my-zsh](https://ohmyz.sh/)三.安装[Powerline](https://powerline.readthedocs.io/en/latest/installation.html)四.安装 [Meslo](https://github.com/powerline/fonts) 字体库五.安装agnoster主题六.安装语法高亮七.安装代码补全插件八

xinximo的博客 2610

保姆级教程:Win10/Win11系统下ArcGIS 10.2中文版完整安装与破解(含License Manager启动失败解决方案)

本文提供Windows 10/11系统下ArcGIS 10.2中文版的完整安装与破解教程,重点解决License Manager启动失败等常见问题。从安装准备、破解文件处理到最终配置验证,详细指导用户完成每一步操作,确保软件正常运行。特别针对主机名修改、端口占用等疑难问题提供专业解决方案。

weixin_29596051的博客 543

Bash字符串处理(与Java对照) - 19.查找字符的位置

Bash字符串处理(与Java对照) - 19.查找字符的位置 In Java String.indexOf &amp; String.lastIndexOf  int     indexOf(int ch)           返回指定字符在此字符串中第一次出现处的索引。  int     indexOf(int ch, int fromIndex)       ...

巨人站在肩膀上 264

BAPI创建委外采购订单

使用BAPI BAPI_PO_CREATE1创建委外采购订单,组件为手工输入时,有几个点需要注意: 1、已通过CS01创建过BOM的物料,创建时会自动带出components。如果要修改当前组件清单,可以通过设置pocomponents-change_id = 'E’来实现 lv_sline = lv_sline + 1. ls_pocomponents-po_item = l_ebelp + 10. ls_pocomponents-ITEM_NO = l

Buffalo_soldier的博客 3260

【IndexOf】【lastIndexOf】【split】【substring】用法详解

1. IndexOf() 和 lastIndexOf()的区别是什么? indexOf() 和 lastIndexOf() 都是索引文件 indexOf() 是查某个指定的字符串在字符串首次出现的位置(索引值)(从左往右) lastIndexOf() 是查某个指定的字符串在字符串最后一次出现的位置(索引值)(从左往右) lastIndexOf() 方法是从后往前搜索,但返回的位置是还是从前开始数的。 let arr = [1, 2, 4, 4, 5, 3, 3, 7, 8, 5] c...

书启鸿蒙知秋枫 1823

保姆级教程:在RK3588开发板上用MPP库实现H.264硬编码(附完整代码)

本文详细介绍了在RK3588开发板上使用MPP库实现H.264硬编码的全流程,包括环境准备、MPP库编译、编码器初始化与配置、数据输入与编码流程以及高级性能优化技巧。通过实战案例和完整代码,帮助开发者充分利用RK3588的VPU硬件加速能力,提升视频编码效率和质量。

weixin_28716769的博客 414

告别臃肿VS!仅用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境

本文详细介绍了如何仅使用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境,避免安装臃肿的完整VS。通过精准选择组件、配置Qt Creator编译器和优化Kit设置,实现高效、精简的Windows平台Qt开发环境搭建,特别适合追求性能和资源优化的开发者。

weixin_30340617的博客 349

bash脚本查找子字符串

bash脚本查找子字符串

m0_50136807的博客 397

YOLOv11模型改进全攻略:利用轻量化模块实现精度与速度双跃升

如果你在实操中遇到模块替换导致的精度骤降或部署报错,不妨尝试调整轻量化模块的替换比例,或针对性地保留关键层的原始结构。记住,轻量化的核心是“在精度损失可接受的范围内最大化提升效率”,只要结合业务场景灵活取舍,你也能让YOLOv11在资源受限的环境中大放异彩。接下来,我们从模块选型到代码集成,一步步带你打造“轻量且能打”的YOLOv11,真正帮你解决工业落地中的效率与精度痛点。训练过程中关注模型的mAP和推理速度,若精度下降过多,可调整模块替换的比例(如仅替换Backbone的部分卷积层)。

m0_64661770的博客 501

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

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

Nicholas的专栏 QQ1295794532 1139

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )...

linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 ) 1.Linux shell 截取字符变量的前8位 实现方法有如下几种: expr substr “$a” 1 8 echo $a|awk ‘{print substr(,1,8)}’ echo $a|cut -c1-8 echo $ expr $a : ‘\(.\\).*’ ech...

weixin_30596023的博客 108

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

linux 判断相等,linux if 判断字符串是否相等

str1==str2和str1.Equals(str2)。两种方法都可以。#!/bin/shecho -n "login:"read nameecho -n "password:"read passwdif [ "$name" = "aa" -a "$passwd" = "aaa" ];thenecho "right!"else echo "error"fi一。运行过程中出现过[: mi...

weixin_29284885的博客 4708

Shell脚本变量与字符串操作实战:从基础语法到自动化运维应用

在Linux系统管理与自动化运维领域,Shell脚本是连接用户与操作系统的核心工具,其本质是通过命令行解释器执行一系列指令的文本文件。理解其工作原理,关键在于掌握变量与字符串处理这两大基石:变量作为脚本的“记忆单元”,用于存储和传递数据;字符串则是与系统交互、处理文本信息的主要载体。从技术价值看,熟练运用变量扩展、字符串截取与替换等操作,能极大提升脚本的健壮性与灵活性,避免因变量未定义或空格处理不当导致的常见错误。这些技能在日志解析、批量文件处理、配置生成等实际应用场景中不可或缺,是构建高效自动化工作流的基

weixin_34194087的博客 374

php字符串替换用户输入,php 字符串替换

推荐文章正则表达式是PHP中一个非常重要的知识点,通常用来查找和替换字符串,验证用户输入的信息格式是否符合规范,如邮件格式、电话格式等等。还有采集器之类的软件中,正则也是必用不可!主要介绍PHP中几个常见的正则函数:preg_match()、preg_match_all()、preg_grep()、preg_split()。推荐文章一、定义和用法replace() 方法用于在字符串中用一些字符替换...

weixin_34524392的博客 199

题解 | #在字符串中找出连续最长的数字串# 注意边界值

** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @retu。昨天刚结束hr面,聊的还行,可是!一个是华为,在杭州,逻辑,周三周五不加班,月末周六加班,薪资还不清楚应该是14级一个是国企,在上海,给编制,吃住都不花钱,总。长鑫数字电路全定制,上海,32.5k*15,年终可能拿不满只有1.5,房补2k比特大陆数字设计,北京,34k*15,hr说固定3个月年终(不知道真假),住公寓打。2.为什么选择做这个课题?

han_xue_feng的博客 220

【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

Python字符串函数深度解析:从基础操作到性能优化实战

字符串处理是编程语言中的基础核心概念,它涉及对文本数据的创建、修改、分析和转换。其原理在于通过内置函数对不可变的字符序列进行操作,高效处理用户输入、数据清洗和格式化等任务。掌握字符串操作的技术价值在于能显著提升代码的健壮性和执行效率,是编写高质量软件的关键。在应用场景上,无论是网络爬虫、日志分析、配置文件解析还是报告生成,都离不开字符串的精确处理。本文聚焦于Python中常用字符串函数的深度解析,特别针对 `str.replace()` 的性能陷阱和 `join()` 的高效实践进行了详细探讨,帮助开发者从

weixin_34221332的博客 362

【Java 21+响应式编程】:用虚拟线程实现千万级QPS的底层逻辑

掌握高并发新范式:通过响应式流的虚拟线程处理,实现Java 21+下千万级QPS。适用于微服务、实时通信等高负载场景,结合Project Loom与Reactor,提升吞吐量并降低资源消耗。底层原理深度解析,值得收藏。

CodeVibe的博客 848

Linux笔记之通配符和正则表达式的区别

1.Linux笔记之通配符和正则表达式的区别2.C++笔记之C语言中的换行符和转义符。

小勇博客 1447

Shell编程-JAVA大数据-Week5-DAY3-linux

文章目录前言2.5 Shell编程2.5.1. 概述**2.5.2. HelloWorld****2.5.3.** **变量****2.5.3.2.** **使用变量****重新定义变量****2.5.3.3.** **删除变量****2.5.3.4.** **常量****2.5.4.** **字符串****2.5.4.1.** **字符串的定义和使用****使用单引号****使用双引号****2.5.4.2.** **字符串常见功能****2.5.5.** **传递参数****2.5.6.****算术运算

qq_43058317的博客 640
上一篇: Bash字符串处理(与Java对照) - 19.查找字符的位置
下一篇: MongoDB试用记录
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值