Sed

使用帶有 sed 的正則表達式從文件中刪除文本

  • September 23, 2021

我正在嘗試使用 sed 從 json 文件中刪除一些行。您可能會說,我非常業餘,但認為我的正則表達式是正確的。但是 sed 會引發各種錯誤,包括未終止的地址和未終止的“s”命令。

我要刪除的文本是:

   {
 "trait_type": "Accessories",
 "value": "None"
}

我必須刪除這個正則表達式(trait_type 在不同的文件中是不同的,所以我需要根據值為“none”來刪除整個塊)

(\{)([\r\n].+)(\r|\n|)(.*(?:None).*)([\r\n].*)

使用線上正則表達式測試器,以上似乎工作完美。

我正在使用的命令(和幾個變體)是:

sed -e 's/\{([\r\n].+)(\r|\n|)(.*(?:None).*)([\r\n].*)//g' 2.json

任何人都可以提供幫助嗎?

非常感謝

假設這是 JSON 文件的一部分,以下jq命令將查找所有具有trait_typekey 和valuekey 的對象,並刪除所有valuekey 具有 value的對象None

jq 'del( .. |
   select(
     type == "object" and
     has("trait_type") and has("value") and 
     .value == "None"
   ) )' file

上面的命令會將操作結果寫入標準輸出。將輸出重定向到一個新文件以保存它。

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