如何选择几个单词,并删除所有包含这些单词的行?

如何选择几个单词,并删除所有包含这些单词的行?

截屏。我想摆脱混乱,只留下像 ID 和 TEXT 之类的东西,但删除其他东西,例如类型、日期、date_unixtime、编辑、来自等。

我尝试了以下命令,尝试删除仅包含一个单词的所有行(我不知道如何在命令中组合所需的单词)但它生成了一个 0 字节文件(请参阅图片2)。注意:它没有抛出任何错误。

<1n6Envrionment.json awk '! "date_unixtime"' >1n6Envrionment2.json

答案1

操作 json 文件的一个更好的工具是杰奇.jq 理解 json,因此它将确保其输出是一个有效的 json 文件。

你可以通过运行来安装 jq

sudo apt install -y jq

然后

jq 'del(.date_unixtime)' 1n6Envrionment2.json

例如,将删除 date_unixtime 字段,类似地

jq 'del(.text_entities)' 1n6Envrionment2.json

将删除 text_entities 及其所有子项。jq 有一个广泛的匹配能力对于它的过滤器,因此您可以多次运行它,或者根据您想要删除的内容,您可以构建一个删除所有内容的过滤器。

答案2

Grep 可以做到这一点。要排除包含单词 的行date

grep -v "date" 1n6Envrionment2.json

要排除更多单词,请使用转义符分隔|,如下所示:

grep -v "date\|date_unixtime\|edited" 1n6Envrionment2.json

> 1n6Envrionment2.json如果您想立即写入更改,可以重定向回同一个文件( )。

答案3

该解决方案与@Artur Meinild 的解决方案类似

示例任务

删除所有行,包括thisnameothername

示例文件名

There is one line
then another
but then there is thisname
and then there is not
then othername
then both thisname and othername

示例代码

grep -vE "thisname|othername" filename

这使用正则表达式,因此据我所知,它比 Meinild 给出的解决方案更强大。

如果只想匹配完整的单词,请使用:

grep -vE "[ ]{0,1}thisname[ ]{0,1}|[ ]{0,1}othername[ ]{0,1}" filename

这意味着单词周围只能有一个空格或者没有任何内容。

示例输出

There is one line
then another
and then there is not

相关内容