gpt4 book ai didi

sed - 如何跳过匹配字符串的行

转载 作者:行者123 更新时间:2023-12-04 02:54:08 28 4
gpt4 key购买 nike

我是 sed 的新手,所以也许有人可以帮助我。我正在修改一些文件并想跳过所有包含字符串“def”或“page”的行。在他们。我如何在 sed 中做到这一点?

最佳答案

如果我理解得很好,除了某些与正则表达式匹配的行之外,您想对不同的行应用一些更改,对吗?在这种情况下,让我们假设我有以下文件:

$ cat file
this is a def
this has no d e f
this is a page by the way
but this is no p a g e as we know ito

我们要替换所有 this来自 that但忽略包含 def 的行或 page .所以首先我们删除以 def 开头的行或 page :
/def/d;/page/d;

然后我们像往常一样应用我们的操作:
s/this/that/g

结果是:
$ sed '/def/d;/page/d;s/this/that/g' file
that has no d e f
but that is no p a g e as we know ito

但如果“跳过”的意思是“不应用我的操作”,只需否定地址:
$ sed -E '/(def|page)/!s/this/that/g' file
this is a def
that has no d e f
this is a page by the way
but that is no p a g e as we know ito

以上说法正确。有趣的是,“或”运算符与“扩展正则表达式”相关联。因此,您必须为“扩展正则表达式”指定 -E,因为 sed 在默认情况下仅使用“基本正则表达式”。

例如,以下语句不起作用:
$ sed -e '/(def|page)/!s/[A-Za-z_]*login[A-Za-z_]*/page.&/g' < file > new_file

但是下面的这个语句有效:
$ sed -E '/(def|page)/!s/[A-Za-z_]*login[A-Za-z_]*/page.&/g' < file > new_file

关于sed - 如何跳过匹配字符串的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6684857/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com