首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >bash shell中的条件查找/替换

bash shell中的条件查找/替换
EN

Stack Overflow用户
提问于 2016-01-15 06:30:16
回答 3查看 711关注 0票数 1

我的问题应该很简单,我猜我失败的地方与语法有关。我希望编写一个简单的shell脚本,它以以下方式操作XML文件。

每个标签内的数据点将是数值。这些应该都是正的,所以如果XML文件中的任何标记中都存在负值,我想用零替换它。例如,以下XML文件称其为"file.xml“

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>-12</tag3>
<tag4>37</tag4>
<tag5>-41</tag5>

应改为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>0</tag3>
<tag4>37</tag4>
<tag5>0</tag5>     

我对此的想法是,如果我在文件中对字符串">-*<“的任何实例进行处理,并使用sed将其替换为>0<,如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
STRING=">-*<"
if grep -xq "$STRING" file.xml
then
sed -i 's/$STRING/>0</g' file.xml
else
echo "that string was not found in the file"
fi

然而,我得到的回报是回显字符串“在文件中找不到那个字符串”,甚至我在文件中包含了负值。在本例中,*不考虑减号后面的任何字符串吗?当然,负号后面可能有任何数字,所以我想我的问题是如何定义变量:STRING=“>-*<”.任何指向正确方向的指示都将不胜感激。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-15 06:45:29

试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
STRING=">-.*<"

或者更好的是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
STRING=">-[0-9]*<"

通常,*表示“最后一个字符/类的任意数目”,因此.*匹配任何字符串,0-9*任何仅由数字组成的字符串。您的表达式将匹配<‘>、'>-<’、‘>-等等.

票数 2
EN

Stack Overflow用户

发布于 2016-01-15 07:54:17

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat aaa.txt
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>-12</tag3>
<tag4>37</tag4>
<tag5>-41</tag5>

将负数替换为零并写入新文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sed 's/-[0-9][0-9]*/0/' aaa.txt > a2.txt

检查新文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat a2.txt
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>0</tag3>
<tag4>37</tag4>
<tag5>0</tag5>
票数 2
EN

Stack Overflow用户

发布于 2016-01-15 07:55:24

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>-[0-9]+<

是一个更好的选择,因为它是一个或多个字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34813275

复制
相关文章
bash shell参数展开(Shell Parameter Expansion):替换变量(variable)中的字符串
在写bash shell脚本时,如果遇到要替换变量中的字符串,首先想到的就是用sed命令,比如下面的示例将变量str中的数字123替换成UUU:
10km
2021/11/11
3.9K0
Bash shell 中的字典
在一些运维工作中,使用字典能让当前工作事半功倍,类似 Python ,在 GNU bash 4.2.46 中,我们也可以很方便的使用字典来完成一些工作了。本文以一段 bash shell 为例展示一下 Bash 中字典的使用。
耕耘实录
2019/07/03
2.7K0
bash和shell的入门中
里面默认有三行,较有趣的地方在于 r 与 m。 就 如同 $PS1 这变量一样,issue 这个文件的内容也是可以使用反斜杠作为变量取用!你可以 man issue 配合 man agetty 得到底下的结果:
小柒吃地瓜
2020/04/23
9690
bash shell中创建函数
与R的定义方式相似,name是这个函数的名称。在调用函数时,bash shell会按命令在 函数中出现的顺序依次执行。
生信编程日常
2020/07/14
8500
Linux Shell中的命令替换
Shell脚本中最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量。有两种方法可以将命令输出赋值给变量。
Tyan
2019/05/25
3.4K0
Bash Shell
shell为用户与Kernel之间的一个接口:shell主要是一个命令解释器,它接受并解释用户输入的命令,然后将这些命令传给内核,最后由内核来执行这些命令。Bourn shell是现在所有shell的始祖,C shell增加了若干Bourn shell没有的特性,如命令行历史、别名和作业控制等。Korn shell增加了若干Bourn shell的超集,它具有类似C shell的加强功能。bash与Bourn shell兼容同时加入了csh、ksh和tcsh的一些有用的功能、GNU项目开发、也是实际上的标准Linux shell。系统中所有shell都存放在/etc/shells文件中。
狼啸风云
2019/01/18
1.5K0
Bash shell中bash、sh、source及“.”的区别与联系
以上列出了当前系统所支持的shell类型。查看shell的历史我们可以知道,我们通常所说的bash shell(bash)全称为GNU Bourne-Again SHell。在目前的发行版中,sh已经成为bash的一个软连接。在man sh的时候大家都会发现,其实man出来的手册时bash的内容。
耕耘实录
2022/05/06
1.1K0
Bash shell中bash、sh、source及“.”的区别与联系
Bash shell 中,select 使用举例
文章目录 Bash shell 中,select 使用举例 一 背景 二 使用举例 2.1 单独使用 select 2.2 结合 case 使用 三 总结 Bash shell 中,select 使用举例 一 背景 在最近的运维工作中,写了很多脚本,在写这些脚本时发现了一些高效的用法,现将 select 的用法简单介绍一下。 二 使用举例 select 表达式是 bash 的一种扩展应用,擅长于交互式
耕耘实录
2019/07/04
8550
pycharm查找与替换_python替换dataframe中的值
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175276.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
6K0
bash shell 中数组使用举例
版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。联系本人:ecsboy(微信),136625317(QQ) https://blog.csdn.net/solaraceboy/article/details/89054508
耕耘实录
2019/07/04
7020
idea如何查找替换_pycharm查找替换
在平时敲代码的时候经常碰到,咦,这个变量名好像不太合适,但又写了好多这时候可以怎么办呢? Pycharm/Idea里面给我们准备了替换功能
全栈程序员站长
2022/09/27
2.7K0
idea如何查找替换_pycharm查找替换
excel中多条件查找_多条件查找用什么函数
然后再采用VLOOKUP进行如下查找:=VLOOKUP(F2&G2,A:D,4,0)
全栈程序员站长
2022/09/19
1.5K0
excel中多条件查找_多条件查找用什么函数
bash shell 中,$* 与 $@ 的区别与联系
两段脚本差别很小,只是多了两个引号而已。也就是说:$* 是带了引号分割的;$@ 是没有带引号分割的,原模原样的字符串。使用的时候注意区分即可。再来看一下下面的例子:
耕耘实录
2019/07/03
1.1K0
bash 的条件和循环
原文 条件语句和循环可以统称为流程控制,是一门语言最基础的部分。 bash 的流程控制和大家熟悉的语言非常类似,所以这块上手应该很快。 条件语句 条件这块建议先去瞧瞧《bash 的 Test》。bash 中的条件语句,基础就是 Test 。 if 先来个实例: x=5; if [ $x = 5 ]; then echo 'x equals 5.'; else echo 'x does not equal 5'; fi # 输出: x equals 5. 和我们熟悉的语言非常相似,不妨抽象
用户1097444
2022/06/29
7550
bash 的条件和循环
本文介绍了bash中的条件语句和循环,包括if、elif、else、case、for和while等语句。作者通过实例介绍了这些语句的使用方式,并提供了参考文章链接,以便读者深入了解。
IMWeb前端团队
2018/01/08
1.3K0
bash 的条件和循环
条件这块建议先去瞧瞧《bash 的 Test》。bash 中的条件语句,基础就是 Test 。
IMWeb前端团队
2019/12/04
9310
关于在vim中的查找和替换
在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。
休辞醉倒
2019/07/25
25.9K0
Bash shell 中,三种子 shell 实践
这个例子展示了三种创建子 shell 的方法,每个子 shell 的内容基本都一致。接下来让我们看一下执行结果:
耕耘实录
2019/07/04
4400
Linux中bash shell环境变量
别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是:
知忆
2021/06/09
1.5K0
Shell 中的命令替换及参数扩展
今天和大家分享的主要是 “命令替换” 以及 “参数扩展” 。 -- 季文康 本文导航 ◈ 前言 00% ◈ 什么是命令替换 14% ◈ 1、一层 SHELL 嵌套 15% ◈ 2、二层 SHELL 嵌套 17% ◈ 3、进阶 30% ◈ 什么是参数扩展 44% ◈ 1、实例一 46% ◈ 2、实例二 52% ◈ 什么是变量扩展 57% ◈ 1、变量替换 65% ◈ 2、变量切片 74% ◈ 3、变量修改 80% ◈ 更深入学习,探索资料 95% 转载自 | http://www.cnblogs.com/
企鹅号小编
2018/01/30
1.5K0
Shell 中的命令替换及参数扩展

相似问题

使用Bash shell SED查找并替换“[[ mytext]]”

25

bash shell中的多个条件

124

Bash Shell变量替换问题

10

如何替换shell bash linux中的表

22

带shell变量的Bash条件

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文