[英]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.