bashshell参数展开(shellparameterexpansion):替换变量(variable)中的字符串(代码片段)

10km 10km     2023-01-30     605

关键词:

在写bash shell脚本时,如果遇到要替换变量中的字符串,首先想到的就是用sed命令,比如下面的示例将变量str中的数字123替换成UUU

$ str=hello,word,123
$ echo $str | sed -E -e 's/[0-9]/U/g'
hello,word,UUUU

上面的例子中用到echo,sed两个命令来实现字符串替换,略显麻烦
其实bash提供了更简单的语法来实现上面的功能,按照$parameter/pattern/string的模式可以简单的如下替换
$parameter/pattern/string的格式说明:

参数名说明
parameter变量名
pattern匹配模板(类似正则表达式),据此查找要匹配的字符串
string对满足pattern匹配条件的字符串进行替换的字符串

pattern 的格式参见 《Pattern-Matching》 https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Pattern-Matching

使用示例:

## 替换所有数字为U
$ str=hello,word,123
$ echo $str//[0-9]/U
hello,word,UUU
## 如果只是要替换第一个出现的数字则这样写
$ echo $str//[0-9]/U
## 如果只是要替换最后一个出现的数字则这样写
hello,word,U23
$ echo $str/%[0-9]/U
hello,word,12U

以上雕虫小技都来自于GNU bash shell手册《Shell-Parameter-Expansion(Shell参数展开)》章节
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameter-Expansion
上面只是《Shell参数展开》一小部分功能的应用示例,
关于《Shell参数展开》官方文档中提供了远比上面内容更丰的应用方式,建议看看原文档你能找到更多有用的技巧。

:更多的bashshell命令·

4.1监测程序4.1.1探查程序ps命令默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户进程的进程显示的当前进程的项目进程号运行在哪个终端(tty)进程占用的CPU时间Linux系统支持的GNUps命令支持3个不同的... 查看详情

bashshell

bashshell特性 1.tab键补全支持          #tab键补全需安装yum-yinstallbash-completion   命令补全  选项补全  参数补全  在实际生产中tab补全往往是我们使用的最多的,因为 查看详情

基本bashshell命令

以下列举一些常用的bashshell命令,在使用时方便查找。访问Linux系统上的手册:man命令。例:manps   手册是由分页程序来显示的,可以通过点击空格,回车,向上和向下箭头进行翻页查看。浏览文件系统:附一张常见Li... 查看详情

sh简单的bashshell脚本模板。有两个版本:1)简单的基于envvar的选项,以及2)添加了命令行参数解析(代码片段)

查看详情

了解基本的bashshell命令(代码片段)

  本节内容主要介绍如何使用bashshell提供的基本命令处理Linux文件和目录;1、启动shell  shell是一个可以交互访问的Linux系统程序,它的运行与普通程序相同,系统启动的shell取决于用户ID的配置;  bash命令常用的参数: ... 查看详情

第21课可变参数模板_展开参数包

1.可变参数模板函数(1)递归函数方式展开参数包  ①一般需要提供前向声明、一个参数包的展开函数和一个递归终止函数。  ②前向声明有时可省略,递归终止函数可以是0个或n个参数(2)逗号表达式和初始化列表方式展... 查看详情

[linux]基础bashshell命令(代码片段)

[Linux]基础操作命令参考书本《Linux命令行与shell脚本大全》复习和查询用,别的用到了在慢慢补充遍历目录目录路径绝对路径cd/usr/bin相对路径cdDocuments返回主目录cd其他实用命令显示当前目录pwd当前目录的父目录…单点表示当前目... 查看详情

shell参数展开

参数展开(parameterexpansion)是shell提供变量值在程序中使用的过程。展开运算符包括替换运算符和模式匹配运算符 替换运算符运算符替换说明记忆${varname:-word}若varname存在且非null,则返回其值;否则返回word。空则返回word${varname... 查看详情

4:bashshell命令-步入linux的现代方法

目录​​4.1CLI准备​​​​4.2CLITerminal​​​​4.3搞定Linux命令参数,得心应手使用各类命令——授之于渔先拿ls开张​​​​4.4Linux根目录,它们和Windows有什么区别​​​​4.5Linux根目录解析,fhs权威论文,搞定所有的发行版本... 查看详情

检查 Bash shell 脚本中是不是存在输入参数

】检查Bashshell脚本中是不是存在输入参数【英文标题】:CheckexistenceofinputargumentinaBashshellscript检查Bashshell脚本中是否存在输入参数【发布时间】:2011-09-2220:48:51【问题描述】:我需要检查输入参数是否存在。我有以下脚本if["$1"-gt... 查看详情

9剩余参数,数组对象展开操作符

1、剩余参数注意:1、形参args前面一定要加‘...’2、args可以随意更换其他名称3、实参不需要写数组的方括号[] 2、数组展开操作符3、对象展开操作符  查看详情

linux学习笔记更多的bashshell命令

一 监测程序1.ps输出运行在系统上的所有程序的许多信息运行ps命令,也会开启一个进程默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程。 Unix风格的参数(单破折号)-e 显示所有进程-f 显... 查看详情

在普通 lisp 中展开 / splat 参数

】在普通lisp中展开/splat参数【英文标题】:Unroll/splatargumentsincommonlisp【发布时间】:2011-01-2116:56:43【问题描述】:假设我有一个参数列表:>(setfformat-args`(t"it\'s~a"1))(T"it\'s~a"1)我怎样才能将它“splat”或“展开”成一系列参数而... 查看详情

为啥这个python表达式参数在调用时没有展开?

】为啥这个python表达式参数在调用时没有展开?【英文标题】:Whyisthispythonexpressionparameterisnotexpandedatcalltime?为什么这个python表达式参数在调用时没有展开?【发布时间】:2018-04-2213:33:37【问题描述】:在googleappengineNDBtherearequerie... 查看详情

从包含双引号的数组中展开参数

】从包含双引号的数组中展开参数【英文标题】:expandargumentsfromarraycontainingdoublequotes【发布时间】:2018-01-0116:47:49【问题描述】:我想在bash中调用具有从数组构建的参数的程序。我希望bash调用:echo-arg1=simple-arg2="somespaces"来自ar... 查看详情

编译时内的模板参数展开for循环?

】编译时内的模板参数展开for循环?【英文标题】:templateargumentsinsideacompiletimeunrolledforloop?【发布时间】:2011-10-0805:09:36【问题描述】:wikipedia(here)给出了for循环的编译时间展开......我想知道我们是否可以在里面使用带有模板语... 查看详情

处理用户输入与显示数据------------(移位shift命令行参数选项)

4.2移位与选项        bashshell工具集中的另一个工具是shift命令。bashshell提供shift命令来帮助操作命令行参数。shift命令能够改变命令行参数的相对位置。        选项是由破... 查看详情

了解dashshell与zshshell(代码片段)

#其他shell:dashshell,zshshelldashshelldashshell特性尽管bashshell和dashshell都以Bourneshell为样板,由于dash的目标是简洁,因此它的环境变量比bashshell少多了。dash变量和bash变量之间有一个巨大的差异,dashshell不支持数组。一、dash命令行参... 查看详情