本问题已经有最佳答案,请猛点这里访问。

我想找到一个Linux命令,它可以返回字符串的一部分。在大多数编程语言中,它是substr()函数。bash是否有任何可以用于此目的的命令?我想做这样的事…substr"abcdefg" 2 3—打印cde。

后续类似问题:

提取bash中的子字符串

不是真的复制品。提取bash中的子字符串要求剪切由某个分隔符包围的字符序列。这个问题要求切割出一段字符串,给出偏移量和长度的数值,就像substr()所做的那样。这不一样。

如果您正在寻找一个shell实用程序来执行类似的操作,那么可以使用cut命令。

要举个例子,请尝试:

echo"abcdefg" | cut -c3-5

其产量

cde

其中,-cN-M通知cut命令将列N返回到M中,包括该列。

尽管我有"可接受"的答案,但我想指出,如果您想进行大量的子字符串提取,使用内置子字符串扩展(参见dmckee的答案)是更有效的方法。也就是说,切割更容易记忆和使用。

如果我们想从第3个字符开始到字符串末尾,即:"abcdef",我们需要cdef,然后echo"abcdef"cut-c3,我们需要做什么?

cut有一些有用的论据可以使用。-f将其从计数字符更改为计数字段,默认情况下由制表符分隔,或由-d后面指定的任何字符分隔。因此,要使输入字符串一直到但不包括第一个斜杠(正是我想要的),您可以这样做:cut -d/ -f-1,它可以被理解为"在用/分隔的子字符串上剪切,只返回第一个"。

从bash手册页:

${parameter:offset}

${parameter:offset:length}

Substring  Expansion.   Expands  to  up  to length characters of

parameter starting at the character  specified  by  offset.

[...]

或者,如果您不确定是否使用bash,请考虑使用cut。

有趣的是,我不知道这件事。对于更灵活的子串选项:手动切割

外壳扩展很好,但是…无聊的。

我基本同意。我通常用vanilla/bin/sh编写shell脚本,但我发现我必须知道一些bashims才能阅读shell脚本…

是否有类似于${str:3:-3}的方法从char 3到最后一个char减去-3提取子字符串?

@Becko我现在的bash手册页(MacOS 10.12,所以我认为BSD的血统)比上面的引用要多得多,包括If offset evaluates to a number less than zero, the value is used as an offset from the end of the value of parameter.,意思是你想要${str:-3:3}。

不起作用:str="abcdefghijklmn"; echo ${str:-2:2}返回abcdefghijklmn

哦,但是以东十一〔五〕做我想做的。

@Becko我想我们在"评估到"上遇到麻烦了。你的例子都不适合我,但是str="abcdefghijklmn"; echo ${str:(-2):2}返回mn。这就是为什么我放弃了去理解贝壳到底在做什么。

@德马克,我在江户十一〔八〕号。

在"pure"bash中,您有许多用于(子)字符串操作的工具,主要是但不限于参数扩展:

${parameter//substring/replacement}

${parameter##remove_matching_prefix}

${parameter%%remove_matching_suffix}

索引子串扩展(具有负偏移的特殊行为,在较新的bash中为负长度):

${parameter:offset}

${parameter:offset:length}

${parameter:offset:length}

当然,对参数是否为空进行操作的非常有用的扩展:

${parameter:+use this if param is NOT null}

${parameter:-use this if param is null}

${parameter:=use this and assign to param if param is null}

${parameter:?show this error if param is null}

它们比列出的行为更具有可调整性,正如我所说,还有其他方法可以操纵字符串(一种常见的方法是$(command substitution)与SED或任何其他外部过滤器结合使用)。但是,通过输入man bash很容易找到它们,我觉得进一步扩展这篇文章不值得。

请记住,"索引子字符串扩展"不是POSIX标准的一部分。因此,尽管它在bash上的速度可能比其他选择更快,但当您希望在不同的操作系统上运行脚本时,它可能会妨碍您的工作。

在bash中,您可以尝试以下方法:

stringZ=abcABC123ABCabc

#       0123456789.....

#       0-based indexing.

echo ${stringZ:0:2} # prints ab

Linux文档项目中的更多示例

expr(1)有一个子命令:

expr substr

如果您没有bash(可能是嵌入式Linux),并且不希望使用cut(1)所需的额外"echo"进程,那么这可能很有用。

这里的文档不使用bash(

${string:position:length}

像往常一样,坐在这里,没有上票,WTF。这对我的parse-git-branch命令非常有用。奈斯!

linux 取字符串的一部分,什么linux shell命令返回字符串的一部分?相关推荐

  1. Centos执行shell命令返回127错误

    Centos执行shell命令返回127错误 在终端可以正常运行 web执行shell 返回127错误 解决方法 应该是运行环境和登录用户的运行环境存在差异造成的 在脚本执行之前,添加. /etc/p ...

  2. linux下如何用c语言调用shell命令-转

    C程序调用shell脚本共有三种法子 :system().popen().exec系列函数 system()不用你自己去产生进程,它已经封装了,直接加入自己的命令exec 需要你自己 fork 进程, ...

  3. Zookeeper之Linux分布式集群搭建及客户端shell命令操作

    一.准备至少三台Linux服务器及对应的jdk环境 1.服务器及jdk环境准备 服务器:至少三台Linux服务器 JDK环境:三台Linux服务器上都需要安装好jdk环境(jdk环境安装参考我的博客: ...

  4. Unix/Linux环境C编程入门教程(39) shell命令之系统管理

    df命令 用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况.命令的使用格式如下: df  [选项] 常用参数及含义如下表所示. df -a:显示所有文件系统的磁盘 ...

  5. java shell 127_java执行shell命令返回127 :No such file or directory

    场景:需要在指定的远端机器执行某些shell命令 过程: java中执行以下代码: Process process = Runtime.getRuntime().exec(realCommond); ...

  6. Linux脚本双引号字符去除,shell命令去除字符串里双引号

    echo \"refs/changes/84/727284/1\" | sed 's/\"//g' shell变量内字符替换和变量字符修改 a=12345123 #将${ ...

  7. LInux:shell 命令:字符串截取

    1.cut命令截取 使用说明 cut 命令从文件的每一行剪切字节.字符和字段并将这些字节.字符和字段写至标准输出. 如果不指定 File 参数,cut 命令将读取标准输入.必须指定 -b.-c 或 - ...

  8. linux+取当天日期文件夹,Linux shell脚本:创建一个包含当前日期名称的文件夹

    我正在尝试制作一个简单的备份脚本,我在创建一个名称为curent date的文件夹时遇到问题 我的脚本是那个,基本上问题出在最后一行 drivers=$(ls /media/) declare -i ...

  9. linux取批量文件的关键字,Linux多文件替换关键字

    现在网上这样的方法只有两种,一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下: 一.Mahuinan法: 用sed命令可以批量替换多个文件中的字符串.sed -i "s/ ...

  10. Linux下查看CPU/内存/硬盘的shell命令

    1.cpu查看 1)cpu个数:#cat /proc/cpuinfo | grep "physical id" | uniq | wc -l 2)cpu核数:#cat /proc/ ...

最新文章

  1. oracle参数文件的本质
  2. DevOps笔记-04:DevOps工具和文化缺一不可
  3. 万里挑一!北大AI女神每天必看的几个优质公众号
  4. 95-190-642-源码-窗口操作符-EvictingWindowOperator
  5. Cookie学习总结
  6. python圆形按钮_小白用python写个贪吃蛇给小白看
  7. java连接mongo_java 连接mongodb
  8. Kafka配置5--Windows下配置Kafka的集群+SASL+SSL
  9. python随机出100道加法题_python3 随机生成10以内的加法算术题
  10. 实验吧 Guess Next Session
  11. 用java开发app的步骤,看看这篇文章吧!
  12. 电脑端知乎不显示图片
  13. Linux系统Word转换PDF,文档字体乱码不显示问题解决
  14. 软件性能测试 容量测试,性能测试容量计算方法
  15. 最新支持7.2!用C++干掉讨厌的学生机房管理助手
  16. linux所说的挂载是什么意思
  17. 中国软件行业协会成立25周年庆典 《程序员》荣获杰出传媒奖
  18. 解决Eclipse “Polling news feeds...”弹出的问题
  19. ByteBuffer学习笔记
  20. android锁屏应用系统排行榜,重塑安卓手机的20大锁屏应用程序

热门文章

  1. outlook配置126邮箱
  2. python登录代码_python自动登录126等邮箱的代码
  3. demonstration记忆_怎样快速记单词方法高效记忆单词法
  4. win7如何设置电脑自动拨号?
  5. php分页设计美化,国产PHP框架之ThinkPHP各模块开发系列十七,美化分页显示
  6. 高通SDX55平台:Modem Loopback测试指导
  7. http请求417错误
  8. 10月24日——程序猿的节日
  9. 太原理工大计算机专业几本,太原理工大学是几本 学生评价怎么样好不好(10条)...
  10. hp服务器时间修改,HP服务器bios时间设置确认