删除文件中与模式不匹配的行
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,第一个字段必须与给定字符串不匹配。
以上是关于删除文件中与模式不匹配的行的主要内容,如果未能解决你的问题,请参考以下文章