"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
여기에는 두 가지 문제가 있습니다.
- 표현식을 묶기 위해 큰따옴표를 사용하고 있으므로 패턴의 큰따옴표가 일치하지 않습니다.
"
단어가 아닌 문자이므로 단어가 없습니다.경계그 후에
그래서
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"
.
.