Linux

如果單詞開始在行中,則刪除行

  • June 11, 2018

我們正在嘗試刪除以“內容”字開頭但沒有成功的行

“內容”一詞實際上可以在文件的開頭或空格或TAB之後開始

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

sed如果您所做的只是根據模式過濾線條,則無需。這就是grep

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

grep -i,而不是那個I地址標誌是標準的。

或者,如果這是一個正確的 JSON 文件,您可以使用 JSON 解析實用程序jq來刪除該密鑰:

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

我在這裡看到兩個問題:

  1. 模式中的雙引號將不匹配,因為您使用雙引號將表達式括起來
  2. "是非單詞字元,所以後面不會有單詞邊界

所以

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

或(如果您必須在表達式周圍使用雙引號)

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

引用自:https://unix.stackexchange.com/questions/448944