首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果不匹配,则返回sed的代码

sed(Stream Editor)是一个强大的文本处理工具,它允许你通过脚本对输入流(文件或管道)进行读取、处理并打印。如果你想在sed中实现“如果不匹配,则返回”的逻辑,你可以使用sed的条件表达式。

下面是一个基本的示例,说明如何使用sed在找到匹配项时执行某些操作,在不匹配时返回:

代码语言:txt
复制
# 假设我们要查找文件中所有的"foo",并替换为"bar",但如果某行不包含"foo",则打印该行
sed '/foo/{s/foo/bar/g;}; s/.*//' input.txt > output.txt

然而,这个命令实际上会打印出所有行的最后一个字符,因为s/.*//会删除从行首到行尾的所有内容。这不是我们想要的效果。为了在不匹配时返回整行,我们可以使用一个稍微复杂一点的技巧:

代码语言:txt
复制
# 使用t命令跳转,如果不匹配则打印整行
sed '/foo/{s/foo/bar/g; t; d;}' input.txt > output.txt

在这个命令中:

  • /foo/ 是一个地址范围,表示匹配包含"foo"的行。
  • {...} 是一个命令组,用于对匹配的行执行多个命令。
  • s/foo/bar/g 是替换命令,将所有的"foo"替换为"bar"。
  • t 是跳转命令,它会跳转到脚本中第一个未标记的t之后的命令。如果没有这样的跳转点,则继续执行后续命令。
  • d 是删除命令,它会删除当前行。

因此,这个命令的逻辑是:如果找到"foo",则替换它并跳转(实际上不会跳转,因为没有标记),然后删除该行(这也不会发生,因为t没有跳转)。如果找不到"foo",则不会执行替换和跳转,直接删除该行(实际上不会删除,因为t没有跳转,所以d也不会执行),因此整行会被打印出来。

注意:这个命令实际上不会删除任何行,因为t没有有效的跳转点,而d总是在t之后。这里的d只是为了防止在找到匹配项时打印该行。

如果你只是想在不匹配时打印整行,而不做任何替换,你可以简化为:

代码语言:txt
复制
# 如果不匹配"foo",则打印整行
sed -n '/foo/!p' input.txt > output.txt

在这个命令中:

  • -n 选项告诉sed不要自动打印模式空间中的行。
  • /foo/! 是一个地址否定,表示不匹配"foo"的行。
  • p 是打印命令,它会打印模式空间中的行。

这样,只有不包含"foo"的行会被打印出来。

参考链接:

  • sed 命令手册页:https://www.gnu.org/software/sed/manual/sed.html

请注意,sed的语法和功能可能因版本和操作系统而异。上面的示例基于GNU sed,它是Linux和macOS上的常见版本。如果你使用的是其他版本的sed,可能需要调整命令的语法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

这部分代码有没有优化空间:假如day天数固定,pd.concat固定?

一、前言 国庆期间在Python白银交流群【像风自由】问了一个Pandas处理问题,提问截图如下: 代码截图如下: 他目标是达到下表这样效果: 二、实现过程 出现这么多数字看上去确实挺难受...,这里【论草莓如何成为冻干莓】给了一个解答,代码如下所示: import pandas as pd df = pd.concat(pd.read_excel(r"LT211120Y6_output(1...后来修改了下代码,如下所示: import pandas as pd df = pd.concat(pd.read_excel(r"LT211120Y6_output(1).xlsx", sheet_name...这篇文章主要盘点了一个Pandas处理问题,文中针对该问题,给出了具体解析和代码实现,帮助粉丝顺利解决了问题。...最后感谢粉丝【像风自由】提问,感谢【论草莓如何成为冻干莓】给出思路和代码解析,感谢【dcpeng】、【此类生物】、【Python狗】、【Engineer】、【Joker】、【谢峰】等人参与学习交流。

38030
  • 一文掌握shell脚本基本语法

    最后运行命令结束代码返回值),执行成功返回0,不成功返回非零值(一般解释为错误码)。 $$ Shell本身PID(ProcessID) $!...Bash变量:区分类型,都是字符串,不允许进行数值计算,除非变量中包含数字。 如果变量值中间有空格,使用引号(单引号或双引号均可)扩起来。 5.4 环境变量 会影响用户接口和shell行为。...,创建一个0长度文件(与touch类似) : 是一个占位符,产生任何输出 1>filename 重定向stdout 到文件 filename中 1>>filename 如果文件存在,直接重定向追加到文件...设置新变量值 ```sh set var[n]=value set -ex var ``` 参数选项 -e(errexit):如果命令返回值不是0,直接退出shll执行。...|仅显示匹配字符串(可以和 -n 结合使用)|| [grep仅显示匹配字符.png] |-v|--invert-match|小写,显示匹配字符内容|| [grep显示匹配patten字符内容

    4K01

    python面试题-【二分法查找】给定一个已排序非重复整数数组和一个目标值,如果找到目标,返回索引。

    前言 给定一个已排序非重复整数数组和一个目标值,如果找到目标,返回索引。如果不是,返回索引按顺序插入时位置。 题目 给定一个已排序非重复整数数组和一个目标值,如果找到目标,返回索引。...如果不是,返回索引按顺序插入时位置。...但是,二分查找时候一定要是有序数组。 二分法思想 1.首先从数组中间元素开始查找,如果该元素正好是目标元素,搜索结束,否则执行下一步。...2.如果目标元素大于/小于中间元素,则在数组大于/小于中间元素那一半区域查找,然后重复步骤1操作。...low = mid + 1 else: high = mid - 1 return low # 没找到返回其位置左边下标

    84720

    leetcode 新题型----SQL,shell,system design

    返回右表所有行。如果右表某行在左表中没有匹配行,则将为左表返回空值。 3)FULL JOIN 或 FULL OUTER JOIN 完整外部联接返回左表和右表中所有行。...当某行在另一个表中没有匹配行时,另一个表选择列表列包含空值。如果表之间有匹配行,整个结果集行包含基表数据值。...left join子句中左表所有行,而不仅仅是链接列所匹配行,如果左表中某行在右表中没有匹配,则在相关联结果行中右表所有选择列均为空值(NULL) SQL语法  select *...交叉连接: Cross join(不带条件where,如果返回或显示匹配行数) SQL语法: select *from table1 cross join table2 如果有条件...在一般 sed 用法中,所有来自 STDIN 数据一般都会被列出到终端上。但如果加上 -n 参数后,只有经过sed 特殊处理那一行(或者动作)才会被列出来。

    1.2K40

    linux awk 函数定义变量赋值,Linux中Awk定义、用法详解

    当awk处理完一个文件之后,它会从ARGV下一个元素获取参数,如果是一个文件继续处理,如果是一个变量赋值执行赋值操作:   当下一个元素为空时,跳过处理,这样可以避开处理某个文件:   上面的例子中...index   index(s, t)   描述:返回字符串t在s中出现位置,注意这里位置是从1开始计算如果没有找到返回0。   ...例如:   match   match(s, ere)   描述: 返回字符串s匹配ere起始位置,如果匹配返回0。该函数会定义RSTART和两个内置变量。...RSTART与返回值相同,记录匹配子串长度,如果匹配则为-1。   ...注意,存放位置是从第1个数组元素开始如果fs为空,默认使用FS分隔。函数返回值分隔个数。

    9.5K50

    linux基础命令介绍十:文本流编辑 sed

    如果第二个地址是个正则表达式,则不会对第一个地址匹配行进行第二个地址匹配如果第二个地址是行号,但小于或等于第一个地址匹配行行号,只会匹配一行(第一个地址匹配行)。...10、addr1,~n表示从匹配地址addr1开始,直到n倍数行为止。 如果没有给出地址,所有的行都会匹配;在地址或地址范围后追加字符!表示对地址取反,所有匹配行才会被处理。...4、w file表示如果替换成功,输出模式空间内容至文件file中。 5、I和i表示匹配regexp时区分大小写。...如果是单地址,每个匹配行都输出,如果是地址范围,只输出一次。...各种命令组合使用,再加上正则表达式强大能力,使得sed可以处理所有能够计算问题。但由于代码可读性不强,理解起来比较困难,通常使用sed作为一个文本编辑器,对文本做非交互流式处理。

    1.1K30

    shell(一)

    以后如果指定,默认shell为命令行式shell,在工作中,最常用便是Linux系统下bash。...这里没有那么多,常见逻辑表达式只有两个: &&和 || && 命令1 && 命令2 如果命令1执行成功,那么执行命令2 如果命令1执行失败,那么执行命令2 || 命令1 || 命令2 如果命令1执行成功...格式: 命令 & 3.3.4grep 匹配文本内容,如果单独使用的话,格式如下: grep [参数] [关键字] -c:只输出匹配计数。 -n:显示匹配行及行号。...-v:显示包含匹配文本所有行。 如果配合管道符使用,后面的文件名是不用写。 小技巧:精确定位错误代码。 -r代表是递归执行命令。...格式: sed [参数] '[动作]' [文件名] 参数: -i:表示对文件进行编辑(如果添加这个参数,修改结果在终端输出,但是不会修改原文件) 匹配条件:数字行号或者关键字匹配 关键字匹配格式

    3.4K50

    Linux Awk用法总结

    当awk处理完一个文件之后,它会从ARGV下一个元素获取参数,如果是一个文件继续处理,如果是一个变量赋值执行赋值操作: 当下一个元素为空时,跳过处理,这样可以避开处理某个文件: 上面的例子中a...index index(s, t) 描述:返回字符串t在s中出现位置,注意这里位置是从1开始计算如果没有找到返回0。...例如: match match(s, ere) 描述: 返回字符串s匹配ere起始位置,如果匹配返回0。该函数会定义RSTART和RLENGTH两个内置变量。...RSTART与返回值相同,RLENGTH记录匹配子串长度,如果匹配则为-1。 例如: split split(s, a[, fs]) 描述:将字符串按照分隔符fs,分隔成多个部分,并存到数组a中。...注意,存放位置是从第1个数组元素开始如果fs为空,默认使用FS分隔。函数返回值分隔个数。

    6.6K40

    linux实战(一)

    地址形式可以是数字、正则表达式、或二者结合。如果没有指定地址,sed将处理输入文件所有行。  地址是一个数字,表示行号;是“$"符号,表示最后一行。...替换s命令 $ sed 's/test/mytest/g' example 在整行范围内把test替换为mytest。如果没有g标记,只有每行第一个匹配test被替换成mytest。...从文件读入r命令 $ sed '/test/r file' example file里内容被读进来,显示在与test匹配行后面,如果匹配多行,file内容将显示在所有匹配下面。...插入i命令 $ sed '/test/i\\new line-------------------------' example 如果test被匹配把反斜杠后面的文本插入到匹配前面。...下一个n命令 $ sed '/test/{ n; s/aa/bb/; }' example 如果test被匹配移动到匹配下一行,替换这一行aa,变为bb,并打印该行,然后继续。

    2.2K10

    sed 命令+正则表达式

    如果在行尾匹配单词j e t 0 1,操作如下:j e t 0 1 $    如果返回包含一个字符行,操作如下:^ . $ 4、使用*匹配字符串中单字符或其重复序列    使用此特殊字符匹配任意字符或字符串重复多次表达式...如果通过正则表达式验证用户邮件地址格式正确,用户所 填写表单信息将会被正常处理;反之,如果用户输入邮件地址与正则表达模式匹配,将会弹出提示信息,要求用户重新输入正确邮件地址。...\w匹配字符;   ....其中,“^”定位符规定匹配模式必须出现在目标字符串开头,“$”定位符规定匹配模式必须出现在目标对象结尾,\b定位符规定匹配模式必须 出现在目标字符串开头或结尾两个边界之一,而“\B”定位符规定匹配对象必须位于目标字符串开头和结尾两个边界之内...为了能够方便用户更加灵活设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而局限于具体字符。

    3.4K20

    sed & awk 第二版学习(五)—— 高级 sed 命令

    如果一行匹配第一个指令并且下一行匹配第二个指令失败,那么第一行就不会被输出。更为通用交换奇偶行 sed 命令如下: sed -n '$!...意思是最后一行操作保持空间,这样如果是奇数行时最后一行也会正常输出。 2....第一个分支命令在模式匹配时将控制转移到 command3。如果模式匹配执行 command2。跟在 command2 后面的分支命令将控制转移到脚本结尾处,绕过了command3。...使用 sed 正常控制流,下一个输入行被读入模式空间,并且控制返回到脚本顶端。每次尝试匹配模式时,都可以用相同方式使用分支。...如果一个输入行匹配这个模式,开始下一个过程来创建多行模式空间。新行本身可能匹配这一搜索字符串。这里策略是,如果第二行匹配模式,输出第二行。 N h s/.

    11410

    Sed 命令详解

    如果加上-n参数后,只有在脚本中使用p,被匹配行才会被列出来,比如:sed -n '//p'(仅显示这一行); -e 用于执行多个编辑命令,如:sed -e '1,3s/my/your...有时我们需要一次进行多次匹配,可参考下面的示例:(第一个模式把第一行到第三行my替换成your,第二个把第3行以后This替换成了That) $ sed '1,3s/my/your/g; 3,$...is fifth texthappy everydayend 本例将文件中所有line替换成text,最后g是global意思,也就是全局替换,如果不加g,只会替换本行第一个line。...pattern space执行sed命令 Pattern_Space <= EXEC(sed_cmd, Pattern_Space); // 如果没有指定 -n 输出处理后Pattern_Space...由于各种各样原因,比如用户希望在某个条件下脚本中某个命令被执行,或者希望模式空间得到保留以便下一次处理,都有可能使得sed在处理文件时候按照正常流程来进行。

    97410

    SED 命令简明教程

    再注意:上面的sed并没有对文件内容改变,只是把处理过后内容输出,如果你要写回文件,你可以使用重定向,如: sed "s/my/Hao Chen's/g" pets.txt > hao_pets.txt...使用圆括号匹配示例:(圆括号括起来正则表达式所匹配字符串会可以当成变量来使用,sed中使用是\1,\2…) sed 's/This is my \([^,&]*\),....第零个是关于-n参数,大家也许没看懂,没关系,我们来看一下sed处理文本代码,并了解一下Pattern Space概念: foreach line in file { //放入把行Pattern_Space...); // 如果没有指定 -n 输出处理后Pattern_Space if (sed option hasn\'t "-n") { print Pattern_Space...This,删除之;如果前面有空格,去除空格 sed '1,${/This/d;s/^ *//g}' pets.txt "my cat's name is betty my dog's name is

    86860
    领券