如何使用sed更改字符串的一部分?

如何使用sed更改字符串的一部分?,sed,sh,Sed,Sh,我有一个带有以下字符串的文件data.txt: text-common-1.1.1-SNAPSHOT.jar text-special-common-2.1.2-SNAPSHOT.jar some-text-variant-1.1.1-SNAPSHOT.jar text-other-variant-text-3.3.3-SNAPSHOT.jar 我想将所有text-something-digits-something.jar更改为text-something-5.0.jar 这是我使用sed(G

我有一个带有以下字符串的文件
data.txt

text-common-1.1.1-SNAPSHOT.jar

text-special-common-2.1.2-SNAPSHOT.jar

some-text-variant-1.1.1-SNAPSHOT.jar

text-other-variant-text-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
用法有什么问题?

我认为一个更简单的方法可能就足够了:
sed-r-e的/(text-(.*)-?common-)([0-9\.]+(.*\.jar)/\15.0\4/”

perl的另一种说法是:
perl-pe/(text-(?:(.-)*common-)([\d\.]+)(.*\.jar)/${1}1.5${4}/'<使用sed:

sed '/^text-/ s/-[0-9.]*-/-5.0-/' file

这个
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-something.jar
text-something-5.0.jar

数字部分更改为
5.0

它还负责仅从
text

#!/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

选择以文本开头的字符串并更改数字值是否存在

我不需要更改
some-text-variant-1.1.1-SNAPSHOT.jar
。这是一个问题:)这也将更改
some-text-variant-1.1.1-SNAPSHOT.jar的版本。它似乎可以工作,但是否可以进行适当的更改?是的,请执行以下操作:
awk'/^text/{sub(/[0-9].*.\./,“5.0”)}1'文件>tmp&mv tmp文件
。它将为
sed
模拟
-i
,我想您的
sed
不支持
\d
数字。如果只有一个文件,那么
for
循环有什么用?@tripleee,一个文件就是一个例子。实际上,此文件是应该进行更改的文件列表。