如果单词在行中开始则删除行

如果单词在行中开始则删除行

我们正在尝试删除以“内容”一词开头的行,但没有成功

“内容”一词实际上可以在文件开头或空格或制表符之后开始

sed 语法有什么问题?

 sed  "/^[ \t]*"content"\b/Id" file.txt

  "version" : 9,
  "Config" : {
    "cluster_name" : "HDP",
    "stack_id" : "HDP"
  },
  "properties" : {
    "content" : "\n#!/bin/bash\n\n# Set KAFKA specific environment variables here.\n\n# 
  "kafka_user_nproc_limit" : "65536"
.
.

file.txt 的预期输出

  "version" : 9,
  "Config" : {
    "cluster_name" : "HDP",
    "stack_id" : "HDP"
  },
  "properties" : {
  "kafka_user_nproc_limit" : "65536"
.
.

答案1

sed如果您所做的只是根据模式过滤行,则无需这样做。这就是grep目的:

grep -iv '^[[:space:]]*"content"' < file.txt

grep -i,与I标准地址标志相反。

或者,如果这是一个正确的 JSON 文件,您可以使用 JSON 解析实用程序,例如jq删除该键:

jq 'del(.properties.content)' < file.txt

答案2

我在这里看到两个问题:

  1. 模式中的双引号不会匹配,因为您使用双引号将表达式括起来
  2. "是非单词字符,所以不会有单词边界在它之后

所以

sed  '/^[ \t]*"content"/Id' file.txt

或(如果必须在表达式两边使用双引号)

sed  "/^[ \t]*\"content\"/Id" file.txt

答案3

我们可以使用下面的命令来完成

sed -e  '/^\s*"content"/d'  file.txt

输出

"version" : 9,
  "Config" : {
    "cluster_name" : "HDP",
    "stack_id" : "HDP"
  },
  "properties" : {
  "kafka_user_nproc_limit" : "65536"
.
.

相关内容