gpt4 book ai didi

regex - sed 使用表达式随机化最后一位数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:02 25 4
gpt4 key购买 nike

我需要解析文件并在找到模式时随机化给定字符串的最后数字。

我能够在使用简单案例时执行所需的结果,但在更复杂的案例中却失败了。

我想知道第二种情况有什么问题。

此处的示例有效。

echo 'AB111-1-13' | sed 's/\(AB111\)-\([0-9]*\)-\([0-9]*\)/echo \1-\2-$(echo \3*$RANDOM | bc )/ge'

但是这个不行。

echo '<http://name/link#AB111-1-13>' | sed 's/\(AB111\)-\([0-9]*\)-\([0-9]*\)/echo \1-\2-$(echo \3*$RANDOM | bc )/ge'

有什么想法吗?

编辑这是尝试运行第二个示例时的错误消息。

sh: -c: line 0: syntax error near unexpected token newline'
sh: -c: line 0:
'

最佳答案

GNU sed e标志将模式空间作为 shell 命令执行。

在您的第一个示例中,您的模式空间以 AB111-1-13 开头并变为 echo AB111-1-$(echo 13*$RANDOM | bc )这是一个有效的 shell 命令并被执行。 (我应该指出 bc 在这里完全没有必要,因为 shell 本身可以很好地执行整数运算 echo $((13 * RANDOM))。)

但是在你的第二个例子中你的模式空间开始于 <http://name/link#AB111-1-13>并变为 <http://name/link#echo AB111-1-$(echo 13*$RANDOM | bc )>这在很大程度上不是有效的 shell 命令,因此,当它试图执行时,您可能会收到一个 shell 错误(尽管您最好将其包含在问题中)。

所以不要使用sed为了这。使用可以评估任意表达式的东西,例如 awkperlpython

关于regex - sed 使用表达式随机化最后一位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35946101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com