在bash中,假设我有输入:
ATGTGSDTST
我要打印:
AT
ATGT
ATGTGSDT
ATGTGSDTST
这意味着我需要查找所有以'T'结尾的子串并打印它们。 我以为我应该在for循环中使用sed,但我不明白在这种情况下如何正确使用sed。 有帮助吗? 感谢
答案 0 :(得分:0)
以下脚本使用sed
:
#!/usr/bin/env bash
pattern="ATGTGSDTST"
sub="T"
# Get number of T in $pattern:
num=$(grep -o -n "T" <<< "$pattern" | cut -d: -f1 | uniq -c | grep -o "[0-9]\+ ")
i=1
text=$(sed -n "s/T.*/T/p" <<< "$pattern")
echo $text
while [ $i -lt $num ]; do
text=$(sed -n "s/\($sub[^T]\+T\).*/\1/p" <<< "$pattern")
sub=$text
echo $text
((i++))
done
给出输出:
AT
ATGT
ATGTGSDT
ATGTGSDTST
答案 1 :(得分:0)
不需要sed,只需使用参数扩展:
#! /bin/bash
string=ATGTGSDTST
length=${#string}
prefix=''
while (( ${#prefix} != $length )) ; do
sub=${string%%T*}
sub+=T
echo $prefix$sub
string=${string#$sub}
prefix+=$sub
done