Linux
如果單詞開始在行中,則刪除行
我們正在嘗試刪除以“內容”字開頭但沒有成功的行
“內容”一詞實際上可以在文件的開頭或空格或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
我在這裡看到兩個問題:
- 模式中的雙引號將不匹配,因為您使用雙引號將表達式括起來
"
是非單詞字元,所以後面不會有單詞邊界所以
sed '/^[ \t]*"content"/Id' file.txt
或(如果您必須在表達式周圍使用雙引號)
sed "/^[ \t]*\"content\"/Id" file.txt