단어가 줄에서 시작되면 줄 삭제

단어가 줄에서 시작되면 줄 삭제

"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 -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"
.
.

관련 정보