删除文件中与模式不匹配的行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除文件中与模式不匹配的行相关的知识,希望对你有一定的参考价值。

我正在尝试迁移包含大量单独文本文件的数据。一步是删除文本文件中的所有行,这些行不再使用。这些行是键值对。我想删除文件中的所有内容,除了那些带有某些键的行。我不知道文件里面的键的顺序。

我想要保留的密钥是例如版本,日期和编号。

我发现了这个问题Remove all lines except matching pattern line best practice (sed)并尝试了接受的答案。我的sed命令是

sed '/^(version=.*$)|(date=.*$)|(number=.*$)/!d' file.txt

在地址后面有一个!d,删除所有不匹配模式的行。

正则表达式的例子:https://regex101.com/r/LKfxpP/2

但它会一直删除我文件中的所有行。我的错误在哪里?我认为我的正则表达式错了,但这里的错误是什么?

答案

你可以用

sed '/^(version|date|number)=/!d' file.txt > newfile.txt

这里的BRE POSIX模式匹配

  • ^ - 开始一条线
  • (version|date|number) - 一个小组匹配 version - version字符串 | - 或 date - date字符串 | - 或 number - number字符串
  • qazxsw poi - 一张qazxsw poi图表。

或者,使用通过=选项启用的POSIX ERE语法:

=

这里,交替运算符-E和捕获括号不需要转义。

看到sed -E '/^(version|date|number)=/!d' file.txt > newfile.txt

另一答案

使用awk:

|

字段分隔符设置为online demo,第一个字段必须与给定字符串不匹配。

以上是关于删除文件中与模式不匹配的行的主要内容,如果未能解决你的问题,请参考以下文章

用于合并 Excel 中与其他列中的信息匹配的行的单元格的宏

如何处理文件夹结构中与模式匹配的所有文件? [复制]

删除目录树中与regex匹配的文件

我如何 git 只添加与模式匹配的行?

sed 命令操作

匹配后删除到行尾,保留不匹配的行