我有一个bash脚本来控制Linux perf。您可能知道,perf采用核心列表,可以在三种方式中的一种中指定。
目前,我有一个环境变量CORENO,它将控制-C $ CORENO。
但是,我需要将CORENO偏移一个修正偏移(I.e.2)
我能做((CORENO + = 2))但这只适用于案例1.
是否有Linux / bash技巧允许我将修复偏移应用于bash变量中的每个数字?
答案 0 :(得分:3)
既然你在Linux上,这里有一些GNU sed:
addtwo() {
sed -re 's/[^0-9,-]//g; s/[0-9]+/$((\0+2))/g; s/^/echo /e;' <<< "$1"
}
addtwo "1"
addtwo "1-4"
addtwo "3,4,5"
将输出:
3
3-6
5,6,7
它的工作原理是用$((number+2))
替换所有数字,并将结果作为shell命令进行评估。首先应用允许字符的白名单以避免任何安全问题。
答案 1 :(得分:1)
查看seq
for core in `seq 2 10`; do
echo CORENO=$core
done
答案 2 :(得分:1)
我从@that其他人那里得到了基于sed的回答,因为我比我更喜欢它,这是一个“纯粹的bash”解决方案,由一个递归函数组成。
function increment () {
local current="$1" n=$(($2))
if [[ "$current" =~ ^[0-9]+$ ]]; then
echo $((current+n))
elif [[ $current == *,* ]]; then
echo $(increment ${current%%,*} $n),$(increment ${current#*,} $n)
elif [[ $current == *-*-* ]]; then
echo ERROR
elif [[ $current == *-* ]]; then
echo $(increment ${current%-*} $n)-$(increment ${current#*-} $n)
else
echo ERROR
fi
}
CORENO=3-5
CORENO=$(increment $CORENO 2)
echo $CORENO
increment 3-5,6-8 3
我的函数在给出非法论证时会打印ERROR
。来自@that的那个人更自由......