刪除 XML 格式中雙引號內的空格

要使用 Shell 命令刪除 XML 格式中雙引號內的空格(僅處理屬性值中的空格,保留標簽外的空格),可以使用以下 sed 命令

sed -i ':loop; s/\("[^"]*\) \([^"]*"\)/\1\2/g; t loop' filename.xml

命令詳解:

  1. 核心邏輯

    • s/\("[^"]*\) \([^"]*"\)/\1\2/g
      匹配雙引號內的內容,將捕獲分組 \1(雙引號后到空格前的文本)和 \2(空格后到雙引號結束的文本)合并,從而刪除一個空格。
    • :loop; t loop
      通過循環重復執行替換,直到一行中所有雙引號內的空格都被刪除。
  2. 關鍵特性

    • 僅處理屬性值(如 name="John Doe"name="JohnDoe"),標簽外的空格(如縮進、換行)保留不變。
    • 支持一行內多個屬性(如 <tag a="val 1" b="val 2"><tag a="val1" b="val2">)。

示例驗證:

輸入 XML

<data><item name="Product 123" price="100 USD"/><info desc="A test example" />
</data>

執行命令后

<data><item name="Product123" price="100USD"/><info desc="Atestexample" />
</data>

系統適配:

  • Linux/macOS(BSD sed)
    直接運行上述命令(macOS 需先安裝 GNU sed,或改用 sed -i '' '...')。
  • Windows(Git Bash/WSL)
    確保在 Bash 環境中運行,語法相同。

注意事項:

  1. 不處理轉義雙引號
    若屬性值包含轉義雙引號(如 \"),此命令可能出錯。復雜 XML 建議使用專業解析器(如 xmlstarlet)。
  2. 備份文件
    首次使用建議先備份文件,或去掉 -i 測試輸出:
    sed ':loop; s/\("[^"]*\) \([^"]*"\)/\1\2/g; t loop' filename.xml
    

替代方案(簡單場景):

若空格僅出現在屬性值中間(非開頭/結尾),可用簡化命令:

sed -i 's/\(="[^"]*\) /\1/g' filename.xml

此方法基于 Shell 文本處理邏輯,通過循環替換解決邊界問題。對于含轉義或嵌套結構的 XML,推薦使用專用工具如 xmlstarlet


相關問題

  1. 如何保留屬性值中的特定空格(如英文單詞間的單個空格)?
  2. 使用 awk 處理 XML 文件時,如何安全刪除雙引號內的空格?
  3. 若 XML 屬性值包含轉義字符(如 &quot;),應如何避免解析錯誤?
: 引用[2]: shell中空格的使用;空格替換;通配符。空格替換 將多個空格替換為一個空格 sed ‘s/[ ][ ]/ /g’ filename sed -e 's/[[:space:]][[:space:]]/ /g’ filename 將1到10個空格替換為一個空格 sed ‘s/[ ]{1,10}/ /g’ filename 去掉多余空格 echo “hello world” | tr -s ‘[[:space:]]’ http://www.runoob.com/linux/linux-comm-tr.html http://wiki.jikexueyuan.com/project/unix/regular-expressions.html
引用[1]:【Shell】Sed 刪除、替換、增加字符串。方式3: 使用單引號,變量直接引用,但是需要通過 eval 執行這個sed命令。eval會對后面Shell命令進行兩遍掃描,如果第一遍掃描后,Shell命令是個普通命令,則執行此命令;如果Shell命令是含有變量的間接引用,則保證間接引用的語義 #!/bin/bash name=tomas eval sed -i ‘s/rose/${name}/g’ name.txt 變量中存在特殊字符處理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90183.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90183.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90183.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦聲音修復?【圖文詳解】電腦沒有聲音?聲音異常

一、問題背景 在使用電腦的過程中&#xff0c;聲音異常是很常見的問題。比如明明打開了音頻文件&#xff0c;卻聽不到任何聲音&#xff1b;或者聲音忽大忽小、伴有雜音&#xff1b;或者更新了聲卡驅動后&#xff0c;電腦播放不了聲音了&#xff1b;還有可能是插入耳機后&#x…

【文獻筆記】ARS: Automatic Routing Solver with Large Language Models

ARS: Automatic Routing Solver with Large Language Models https://github.com/Ahalikai/ARS-Routbench/ ARS&#xff1a;基于大語言模型的自動路由求解器 1. 概述 1.1. 研究背景 車輛路徑問題&#xff08;VRP&#xff09;是一類經典的組合優化問題&#xff0c;廣泛應用于…

RK3568筆記九十:基于web顯示RTSP流

若該文為原創文章,轉載請注明原文出處。 在網上看到個方案,使用web顯示RTSP視頻流,思路是前端傳入RTSP地址,cgi通過FFMPEG接收RTSP流并保存成avi文件,在通過ffmpeg 命令把avi文件保存成mp4文件,前端在播放mp4文件。此方案需要先保存文件,在轉換文件,無法實時播放。 所以…

2025年Flutter開發主流技術棧

2025年Flutter開發主流技術棧 Flutter作為一種高效、跨平臺的移動應用開發框架&#xff0c;近年來在開發者社區中越來越受歡迎。以下是2025年Flutter開發的主流技術棧&#xff0c;涵蓋了從核心框架到開發工具、狀態管理、數據存儲等多個方面。 1. 核心框架 Flutter&#xff1a;…

Qt 常用控件 - 1

控件概述 編程講究的是 --- 站在巨人的肩膀上 --- 不是編寫一個圖形化界面上的內容 --- Qt 已經提供了很多控件了&#xff01;&#xff01;&#xff01;提高圖形化界面的開發效率&#xff01;&#xff01;&#xff01;重點變成我們怎么使用這些已有的控件&#xff01; Widge…

springdoc-openapi-ui的使用教程

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.14</version> </dependency>springdoc-openapi-ui 是一個用于生成 OpenAPI 文檔的庫&#xff0c;它與 Swagger 的關…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-3,(運放/三極管)

目錄 1、題目 2、解答 【硬件-筆試面試題】硬件/電子工程師&#xff0c;筆試面試題-3&#xff0c;&#xff08;運放/三極管&#xff09; 這是一道大疆的筆試題 1、題目 2、解答

SQL Server 數據類型的含義、特點及常見使用場景的詳細說明

數值類型 bigint 含義:用于存儲大范圍的整數,是 8 字節(64 位)有符號整數類型。 范圍:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 。 場景:適合存儲像訂單編號(可能很大)、系統中需要大范圍計數的標識等,比如大型系統中大量數據的主鍵自增列(數據量極…

WPF的一些基礎知識學習記錄

路由事件 路由事件(Routed Event)是WPF事件系統的核心&#xff0c;它允許事件在元素樹中傳播&#xff0c;而不僅僅局限于引發事件的對象。包含以下三類&#xff1a;類型方向觸發順序典型用途示例事件??直接事件(Direct Event)??不路由只在源元素觸發類似傳統.NET事件MouseE…

【補題】Codeforces Round 1000 (Div. 2) C. Remove Exactly Two

題意&#xff1a;給一個樹&#xff0c;可以從里面刪去兩個點&#xff0c;使連通塊數量最大 思路&#xff1a;題解&#xff1a;CF2063C Remove Exactly Two - 洛谷專欄 這道題很容易想到&#xff0c;直接刪去度最多的兩個點就行了&#xff0c;但是這并不對&#xff0c;因為相鄰…

基于php的校園招聘平臺

學生&#xff1a;注冊&#xff0c;登錄&#xff0c;個人中心&#xff0c;學生應聘管理&#xff0c;面試邀請管理企業&#xff1a;登錄&#xff0c;個人中心&#xff0c;招聘信息管理&#xff0c;學生應聘管理&#xff0c;面試邀請管理管理員&#xff1a;登錄&#xff0c;個人中…

在 Ubuntu 22.04 上運行 cAdvisor 時遇到 mountpoint for cpu not found 錯誤

通常是由于 cgroup v2 導致的兼容性問題。Ubuntu 22.04 默認使用 cgroup v2&#xff0c;而舊版本的 cAdvisor 可能不完全支持它。以下是解決方案&#xff1a;方法 1&#xff1a;啟用 cgroup v1&#xff08;推薦&#xff09;臨時切換回 cgroup v1&#xff08;cAdvisor 兼容性更好…

如何讓RAGFLow每次知識檢索都是返回知識庫中的所有文檔?

在使用raglfow過程中,有時候輸入的文本檢索為空,要么就是只返回幾條.如果想要看到所有知識庫里文本返回,就得需要去到源碼里修改這個參數minimum_should_match(路徑:rag/utils/es_conn.py),將其設置為0%,即可返回所有文本!!

「iOS」——KVO

源碼學習iOS底層學習&#xff1a;KVO 底層原理KVO注冊 KVO 監聽 實現 KVO 監聽 移除 KVO 監聽 處理變更通知 手動KVO(禁用KVO)關閉自動通知手動實現 setter 方法KVO 和線程如果 KVO 是多線程的**單線程的保證**如果沒有 prior 選項**prior 選項的作用**KVO 實現原理派生類重寫的…

Unreal5從入門到精通之使用 Python 編寫虛幻編輯器腳本

文章目錄 前言 如何運行Python 1.控制臺 2.藍圖調用python python 入門 變量 數據類型 運算符 條件判斷 循環 函數 模塊引用 類型轉換 類 類方法 繼承 構造函數 unreal API 創建材質 創建材質實例 獲取Content下選中資源 獲取關卡中選中Actors 放置Cube 編輯器進度條 展示對話框…

Django3 - Web前端開發基礎 HTML、CSS和JavaScript

網站開發可以分為前端開發和后端開發&#xff0c;前端開發是指網頁設計&#xff0c;我們在瀏覽器看到網站的圖片、文字、音樂視頻等內容排版都是由前端開發人員實現的&#xff1b;后端開發是為前端開發提供實際的數據內容和業務邏輯&#xff0c;比如提供文字內容、圖片和音樂視…

Nginx和Apache的區別

一。Nginx和Apache的優缺點和對比Nginx 優點Apache 優點性能與并發采用事件驅動模型&#xff0c;支持 10 萬 高并發連接&#xff0c;資源&#xff08;CPU / 內存&#xff09;占用極低生態成熟&#xff0c;內置模塊可直接處理動態內容&#xff0c;無需依賴第三方程序配置與部署…

前端實現可編輯腦圖的方案

前端實現可編輯腦圖的方案 實現可編輯腦圖(Mind Map)在前端有多種方案&#xff0c;以下是一些主流的技術方案&#xff1a; 1. 基于現有開源庫的方案 JavaScript 庫 MindElixir: 輕量級開源腦圖庫&#xff0c;支持節點增刪改、拖拽、導入導出等 GitHub: https://github.com/sssh…

7-大語言模型—指令理解:指令微調訓練+模型微調

目錄 1、指令微調的訓練過程 2、指令微調數據 2.1、“指令輸入” 2.2、“答案輸出” 3、指令微調數據的構建方法 3.1、手動構建&#xff1a;純人工 “出題 寫答案” 3.1.1、構建流程 3.1.1.1、定義任務類型 3.1.1.2、設計指令模板 3.1.1.3、人工標注響應 3.1.2、工…

服務器版本信息泄露-iis返回包暴露服務器版本信息

漏洞信息描述&#xff1a;服務器版本信息泄露 測試過程&#xff1a;訪問http://192.168.23.63&#xff0c;看返回包可以得知服務器版本信息 顯示暴露返回server版本信息 修復建議&#xff1a;限制返回包帶有服務器版本信息 如何隱藏IIS Web服務響應頭中的IIS Server版本信息…