我有一个文件data.txt
,其中包含以下字符串:
文本共1.1.1- SNAPSHOT.jar
文本特殊共2.1.2-SNAPSHOT.jar
一些文本变-1.1.1- SNAPSHOT.jar
文本另一个变文本-3,3,3- SNAPSHOT.jar
我想将所有text-something-digits-something.jar
更改为text-something-5.0.jar
。
这是我的脚本sed
(GNU sed版本4.2.1
),但它不起作用,我不知道为什么:
#!/bin/bash
for t in ./data.txt
do
sed -i "s/\(text-[a-z]*-(\d|\.)*\).*\(.jar\)/\15.0\2/" ${t}
done
我的sed
用法有什么问题?
答案 0 :(得分:1)
这个awk
awk '/^text/ {sub(/[0-9].*\./,"5.0.")}1'
text-common-5.0.jar
text-special-common-5.0.jar
some-text-variant-1.1.1-SNAPSHOT.jar
text-another-variant-text-5.0.jar
text-something-digits-something.jar
至text-something-5.0.jar
等变digits-someting
至5.0
它还负责仅从text
答案 1 :(得分:0)
我认为更简单的方法可能就足够了:sed -r -e 's/(text-(.*-)?common-)([0-9\.]+)(-.*\.jar)/\15.0\4/' < your_data
。
用perl说同样的话的另一种方式:perl -pe 's/(text-(?:(.*-))*common-)([\d\.]+)(-.*\.jar)/${1}1.5${4}/' < your_data
。
答案 2 :(得分:0)
使用sed:
sed '/^text-/ s/-[0-9.]*-/-5.0-/' file
答案 3 :(得分:0)
#!/bin/bash
for t in ./data.txt
do
sed -i '/^text-/ s/[.0-9]\{1,\}-something\(\.jar\)$/5.0\2/' ${t}
# for "any" something
#sed -i '/^text-/ s/[.0-9]\{1,\}-[^?]\{1,\}\(\.jar\)$/5.0\2/' ${t}
done
选择以文本开头的字符串并更改数字值