単語が行から始まる場合、行を削除

単語が行から始まる場合、行を削除

「content」という単語で始まる行を削除しようとしましたが、成功しませんでした。

「content」という単語は、実際にはファイルの先頭または空白またはタブの後ろから始めることができます。

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 -iI標準アドレスフラグとは反対です。

あるいは、これが正しいJSONファイルの場合は、JSON解析ユーティリティを使用してjqキーを削除できます。たとえば、次のようになります。

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

おすすめ記事