Regex 在XML文件中使用bash查找并替换字符串的一部分
我不熟悉bash脚本,正在研究什么样的命令可以帮助我替换xml文件中的特定字符串 绳子看起来像Regex 在XML文件中使用bash查找并替换字符串的一部分,regex,bash,sed,Regex,Bash,Sed,我不熟悉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/”的第一部分是常量,跨越所有字符串。下半场情况有所不同 这需要在整个文件中完成。请注意,替换一个字符串比为每个不同的字符串替换一
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
表示全局。我使用~
作为分隔符字符,因为这有助于避免转义路径中的所有/
。(谢谢@Jotne)
更新:为了使正则表达式更灵活,您可以尝试以下方法:
sed 's~file.*/\(.*\.jar\)\(.*\)~file:///lib/\1\2~' a.txt
它搜索文件:。jar
链接,获取jar文件的名称并构建新链接。使用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
表示全局。我使用~
作为分隔符字符,因为这有助于避免转义路径中的所有/
。(谢谢@Jotne)
更新:为了使正则表达式更灵活,您可以尝试以下方法:
sed 's~file.*/\(.*\.jar\)\(.*\)~file:///lib/\1\2~' a.txt
它搜索文件:。jar
links,获取jar文件的名称并构建新链接。使用awk
可以执行以下操作:
awk -F/ '/file:\/var\/lib\/abc\/cde.repo\/r/ {print $1,$3,$NF}' OFS=/ file
uri='file:/lib/abc-1.1.jar'
静态URL,但更改文件名。使用awk
可以执行以下操作:
awk -F/ '/file:\/var\/lib\/abc\/cde.repo\/r/ {print $1,$3,$NF}' OFS=/ file
uri='file:/lib/abc-1.1.jar'
静态URL,但更改文件名。您不需要使用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}
您不需要使用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}
感谢hek2mgl的快速响应!那很快。如何在字符串的前半部分是静态的,而后半部分不断变化的情况下重复执行此操作(根据问题)。我想用类似的格式替换文件中的所有字符串。例如,第二个字符串看起来像uri='file:/var/lib/abc/cde.repo/t/e/s/t/v/1.9/zzz-1.9.jar'将替换为'uri='file:/lib/zzz-1.9.jar',请尝试以下sed-re“s~uri='file:\s+/(\s+“$~uri file:/lib/\1'~g”文件
@hek2mgl,这里有近23000个点,您应该知道,sed
可以使用如下不同的分隔符:sed“s~uri='file:/var/lib/abc/cde.repo/r/c/e/v/1\.1/abc-1.1.jar='file:/lib/abc-1\.1\.jar~g'
这样您就不需要逃避我今天必须离开的所有//code>@Masti。如果你明天有耐心,我可以帮你。。我想社区可能会更快……)@Jotne我认为文本编辑是sed的一项任务。虽然可以使用awk
,但是这里应该使用sed
。甚至xslt
,因为正则表达式和html/xml
不是朋友。。。。。特写,谢谢你的~
…)感谢hek2mgl的快速响应!那很快。如何在字符串的前半部分是静态的,而后半部分不断变化的情况下重复执行此操作(根据问题)。我想用类似的格式替换文件中的所有字符串。例如,第二个字符串看起来像uri='file:/var/lib/abc/cde.repo/t/e/s/t/v/1.9/zzz-1.9.jar'将替换为'uri='file:/lib/zzz-1.9.jar',请尝试以下sed-re“s~uri='file:\s+/(\s+“$~uri file:/lib/\1'~g”文件
@hek2mgl,这里有近23000个点,您应该知道,sed
可以使用如下不同的分隔符:sed“s~uri='file:/var/lib/abc/cde.repo/r/c/e/v/1\.1/abc-1.1.jar='file:/lib/abc-1\.1\.jar~g'
这样您就不需要逃避我今天必须离开的所有//code>@Masti。如果你明天有耐心,我可以帮你。。我想社区可能会更快……)@Jotne我认为文本编辑是sed的一项任务。虽然可以使用awk
,但是这里应该使用sed
。甚至xslt
,因为正则表达式和html/xml
不是朋友。。。。。特写,谢谢你的~
…)