我正在尝试迁移包含大量单独文本文件的数据。一步是删除文本文件中的所有行,这些行不再使用。这些行是键值对。我想删除文件中的所有内容,除了那些带有某些键的行。我不知道文件里面的键的顺序。
我想要保留的密钥是例如版本,日期和编号。
我发现了这个问题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
字符串或者,使用通过=
选项启用的POSIX ERE语法:
=
这里,交替运算符-E
和捕获括号不需要转义。
看到sed -E '/^(version|date|number)=/!d' file.txt > newfile.txt
。