我有这样一句话:

sed -i 's/mystring/newstring/' $target

此命令将所有mystring更改为newstring.

我现在想要的是:当程序看到mystring时,如果字符串searchstring存在或不存在,我如何判断当前行?如果存在,newstring1;否则,newstring就是0.

推荐答案

解决方案

假设您的输入文件$target包含以下内容:

some text mystring some other text
some text mystring a searchstring
just some more text

此命令:

sed -i -e '/searchstring/ s/mystring/1/ ; /searchstring/! s/mystring/0/' $target

将其内容更改为:

some text 0 some other text
some text 1 a searchstring
just some more text

解释

该脚本包含两个用分号分隔的替换(s)命令.

替换命令接受一个可选的地址范围,该地址范围 Select 替换应发生的行.

在这种情况下,regexp地址用于为第一个命令 Select 包含searchstring的行;第二行不包含searchstring(注意在regexp否定匹配后的感叹号).

编辑

此命令将执行得更好,并产生相同的结果:

sed -i -e '/searchstring/ s/mystring/1/ ; s/mystring/0/' $target

关键是命令是按顺序执行的,因此,如果当前行after中仍然有mystring个子字符串,第一个命令完成,那么肯定没有searchstring子字符串.

感谢用户946850.

Linux相关问答推荐

为什么仅使用&i-i标志时仍会从容器进程中输出

我想显示包含一个方括号的行,方括号可以是开括号,也可以是闭括号.

在Linux中随机化txt文件但保证不重复行

Bash shell 脚本未通过 TRUE 条件

linux shell 脚本获取文件夹中

c++进程状态中的+是什么意思

根据文件名对目录中的文件进行 chgrp

try 使用 patchelf 修补 MuJoCo 二进制文件时出现执行格式错误

在 bash 中查找匹配多个模式的文件

如何使用 sed debug调试正则表达式?

如何找出哪个进程正在消耗等待 CPU(即 I/O 阻塞)

将 awk 输出保存到变量

什么是最有效的不区分大小写的 grep 用法?

你如何在 C 中的 Linux 上进行非阻塞控制台 I/O?

为什么 mmap() 比顺序 IO 快?

在亚马逊 ec2 linux 微型实例上的 virtualenv 中安装 scipy 时遇到问题

如何从命令行打开 Ubuntu Linux 上的 AVD 管理器?

计算每个进程打开的文件

linux脚本杀死java进程

在 Docker 容器中运行的 JVM 的驻留集大小 (RSS) 和 Java 总提交内存 (NMT) 之间的差异