簡體   English   中英

在XML文件中使用bash查找和替換字符串的一部分

[英]Find and replace part of a string using bash in an XML file

我是bash腳本的新手,一直在研究什么樣的命令將幫助我替換xml文件中的特定字符串。

字符串看起來像

uri='file:/var/lib/abc/cde.repo/r/c/e/v/1.1/abc-1.1.jar'

應該換成

uri='file:/lib/abc-1.1.jar'

罐子也隨弦而變化。 字符串“ file:/var/lib/abc/cde.repo/r/”的第一部分是恆定的,並且貫穿所有字符串。 第二半是變化的

這需要在整個文件中完成。 請注意,替換每個字符串比較容易,然后對每個字符串進行替換。 我正在嘗試尋找解決方案,只需一個命令即可。

我知道我們可以使用sed,但是如何使用? 任何指針都受到高度贊賞

謝謝

sed

sed "s~uri='file:/var/lib/abc/cde.repo/r/c/e/v/1\.1/abc-1.1.jar~uri='file:/lib/abc-1\.1\.jar'~g"

基本上是:

sed "s~pattern~replacement~g"

其中s是命令替換,尾隨g表示全局。 我將~用作定界符char,因為這有助於避免轉義所有/路徑。 (感謝@Jotne)


更新:為了使正則表達式更加靈活,您可以嘗試以下操作:

sed 's~file.*/\(.*\.jar\)\(.*\)~file:///lib/\1\2~' a.txt 

它搜索file: ... .jar鏈接,獲取jar文件的名稱並建立新鏈接。

使用awk您可以執行以下操作:

awk -F/ '/file:\/var\/lib\/abc\/cde.repo\/r/ {print $1,$3,$NF}' OFS=/ file
uri='file:/lib/abc-1.1.jar'

靜態網址,但文件名正在更改。

您無需使用sed甚至awk 您可以簡單地使用basename

prefix='file:/lib/'
uri='file:/var/lib/abc/cde.repo/r/c/e/v/1.1/abc-1.1.jar'
result="${prefix}$(basename ${uri})"
echo ${result}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM