[英]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.