繁体   English   中英

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

[英]delete lines in file not matching the pattern

我正在尝试迁移由很多单独的文本文件组成的数据。 第一步是删除文本文件中的所有不再使用的行。 这些行是键值对。 我想删除文件中除带有某些键的那些行以外的所有内容。 我不知道文件内键的顺序。

我要保留的密钥例如是版本,日期和数字。

我发现了这个问题, 删除除匹配模式行最佳实践(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字符串
  • = -一个=字符。

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

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

在这里,交替运算符| 并且捕获括号不需要转义。

观看在线演示

使用awk:

awk -F= '$1 !~ /version|date|number/' file.txt

字段分隔符设置为=并且第一个字段不得与给定的字符串匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM