如何使用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,一个文件就是一个例子。实际上,此文件是应该进行更改的文件列表。