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

问题描述 投票:1回答:2

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

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

我发现了这个问题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

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

regex bash sed
2个回答
1
投票

你可以用

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


1
投票

使用awk:

|

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

© www.soinside.com 2019 - 2024. All rights reserved.