嘿,让我们说你有一个字符串" aabbaabbbaab"。如你所见,你有3块" b"。例如,如何删除b的第二个块,所以" bbb"?它应该把字符串变成:" aabbaaaab"。我试过到处寻找但我无法想到我的具体问题的正确语法。我需要在纯粹的bash中这样做,所以没有awk,sed等。
答案 0 :(得分:1)
在替换所有出现的myString
之后,应该打印bbb
。有关bash中字符串操作的一些非常有用的提示和示例,请查看this站点。
myString="aabbaabbbaab"
echo ${myString//bbb/}
答案 1 :(得分:1)
这是纯粹的bash:它逐个字符地迭代字符串。当它检测到它位于指定char的第n个块时,我们知道直到这里的整个字符串是我们想要的输出的第一部分。当我们到达第n个块的末尾时,我们知道需要其余的字符串。
remove_nth_block () {
local str=$1 char=$2 n=$3
local i count=0 prev prefix
for ((i=0; i<${#str}; i++)); do
if [[ ${str:i:1} = $char && $prev != $char ]]; then
((++count == n)) && prefix=${str:0:i}
else
if [[ ${str:i:1} != $char && $prev = $char && $count -eq $n ]]; then
echo "$prefix${str:i}"
return
fi
fi
prev=${str:i:1}
done
}
然后
$ remove_nth_block aabbaabbbaab b 2
aabbaaaab
$ remove_nth_block aabbaabbbaab a 2
aabbbbbaab