我有一个包含以下字符串的字符串:aaaccbbaabbbb
我需要放弃前面的aaa或后面的bbbb中的字符序列。我已尝试将resString=(${resString%%b*b})
ressstring aaaccbbaabbbb
变为aaaccbbaa
。但我需要将删除的bbbb保存到文件中。有没有办法反转resString=(${resString%%b*b})
的结果以获取文件中的bbbb
。我尝试使用##操作,但是这样麻烦,因为我只需要在String的前面或后面重复。
答案 0 :(得分:2)
您可以使用bash正则表达式匹配:
resString='abababbbb'
if [[ $resString =~ [^b](b+)$ ]] ; then
resString=${BASH_REMATCH[1]}
fi
echo $resString
这会打印bbbb
。
答案 1 :(得分:2)
您可以使用扩展globbing参数扩展:
#!/bin/bash
shopt -s extglob # Turn extended globbing on.
s=aaaccbbaabbbb
prefix=${s%%[^a]*} # Remove everything from the first non-"a".
prefix_rest=${s##+(a)} # Remove all a's at the beginning.
suffix=${s##*[^b]} # See above.
suffix_rest=${s%%+(b)}
[[ $prefix$prefix_rest == $s ]] || echo Wrong prefix
[[ $suffix_rest$suffix == $s ]] || echo Wrong suffix
echo "$prefix : $prefix_rest"
echo "$suffix_rest : $suffix"
答案 2 :(得分:1)
好的,使用${//}
的全新方法。
完全自动,它会找到第一个字符,哪个是最后一个字符。
通过这套装置,它可以在前面选择跑步并在后面跑动
当然,您需要编辑程序以选择您需要将哪些部分发送到文件,打印或其他任何部分。我希望你能完成这部分工作。
这似乎适用于任何字符串(甚至重复的字符):
#!/bin/bash
a=(aaaccbbaabbbb aaabbbbaaaa abababbbb bbbaaabbb aaaaaa aaabbbbaaaa)
for resString in "${a[@]}"; do
echo
echo "String :$resString:"
l="$((2+${#resString}))"
frontchar=${resString:0:1} ; printf "%s%-${l}s\n" "Frontchar" ":$frontchar:"
backchar=${resString:0-1:1} ; printf "%s%${l}s\n" "Backchar " ":$backchar:"
head="${resString/%[^$frontchar]*}"; printf "%s%-${l}s\n" "head " ":$head:"
tail="${resString/#*[^$backchar]}" ; printf "%s%${l}s\n" "tail " ":$tail:"
preffix="${resString%$tail}" ; printf "%s%-${l}s\n" "preffix " ":$preffix:"
suffix="${resString#$head}" ; printf "%s%${l}s\n" "suffix " ":$suffix:"
echo "Using the head/suffix value: $head -- $suffix"
echo "Using the preffix/tail value: $preffix -- $tail"
done
运行它,你得到:
String :aaabbbbaaaa:
Frontchar:a:
Backchar :a:
head :aaa:
tail :aaaa:
preffix :aaabbbb:
suffix :bbbbaaaa:
Using the head/suffix value: aaa -- bbbbaaaa
Using the preffix/tail value: aaabbbb -- aaaa
String :aaaccbbaabbbb:
Frontchar:a:
Backchar :b:
head :aaa:
tail :bbbb:
preffix :aaaccbbaa:
suffix :ccbbaabbbb:
Using the head/suffix value: aaa -- ccbbaabbbb
Using the preffix/tail value: aaaccbbaa -- bbbb
String :abababbbb:
Frontchar:a:
Backchar :b:
head :a:
tail :bbbb:
preffix :ababa:
suffix :bababbbb:
Using the head/suffix value: a -- bababbbb
Using the preffix/tail value: ababa -- bbbb
String :aaaaaa:
Frontchar:a:
Backchar :a:
head :aaaaaa:
tail :aaaaaa:
preffix ::
suffix ::
Using the head/suffix value: aaaaaa --
Using the preffix/tail value: -- aaaaaa