gpt4 book ai didi

bash - sed-ish oneliner 在替换中执行算术

转载 作者:行者123 更新时间:2023-12-03 15:07:54 25 4
gpt4 key购买 nike

我有一个表单字符串 FOO_123_BAR.bazquux ,其中 FOOBAR是固定字符串,123是一个数字和 bazquux是自由格式的文本。
我需要对这个字符串执行文本转换:extract 123bazquux , 增加数字,然后将它们排列在不同的字符串中。
例如,FOO_123_BAR.bazquuxFOO=124 BAR=bazquux .
(实际转换更复杂。)
自然地,我可以在一系列 sed 和 expr 调用中做到这一点,但它很难看:

shopt -s lastpipe

in=FOO_123_BAR.bazquux
echo "$in" | sed -r 's|^FOO_([0-9]+)_BAR\.(.+)$|\1 \2|' | read number text
out="FOO=$((number + 1)) BAR=$text"
是否有更强大的文本处理工具可以在一次调用中完成这项工作?如果是,那么如何?

编辑:我很抱歉没有更清楚地说明这一点,但输入和输出的确切结构是一个例子。因此,我更喜欢使用任何分隔符或不存在分隔符的通用解决方案,而不是依赖于 e 的解决方案。 G。下划线的存在。

最佳答案

GNU sed ,您可以使用 e 作为外部命令执行整个替换字符串旗帜。

$ s='FOO_123_BAR.bazquux'
$ echo "$s" | sed -E 's/^FOO_([0-9]+)_BAR\.(.+)$/echo FOO=$((\1 + 1)) BAR=\2/e'
FOO=124 BAR=bazquux
为避免与 shell 元字符冲突,您需要引用未知部分:
$ s='FOO_123_BAR.$x(1)'
$ echo "$s" | sed -E 's/^FOO_([0-9]+)_BAR\.(.+)$/echo FOO=$((\1 + 1)) BAR=\2/e'
sh: 1: Syntax error: "(" unexpected

$ echo "$s" | sed -E 's/^FOO_([0-9]+)_BAR\.(.+)$/echo FOO=$((\1 + 1)) BAR=\x27\2\x27/e'
FOO=124 BAR=$x(1)

关于bash - sed-ish oneliner 在替换中执行算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63281637/

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