1

我有一个包含以下内容的文件/字符串:

[1-9]
[11-12]
[10-15]

然后我想将其扩展为:

1 2 3 4 5 6 7 8 9
11 12
10 11 12 13 14 15

我知道如何以很长的方式做到这一点(首先捕获两个数字,然后使用 for 循环扩展它们)。

我想知道是否有更快/更智能的方法来实现同样的目标。

4

4 回答 4

2

一种方法:(纯 bash 解决方案)

while IFS=- read l1 l2
do
   eval echo ${l1/[/{}".."${l2/]/}}
done < file
于 2013-03-29T08:19:44.443 回答
1

有几种解决方案。

解决方案1:

sed 's/^/echo /; s/[[]/{/; s/]/}/; s/-/../' | bash

例子:

$ cat 1.txt | sed 's/^/echo /; s/[[]/{/; s/]/}/; s/-/../' | bash
1 2 3 4 5 6 7 8 9
11 12
10 11 12 13 14 15

解决方案2:

tr '[]-' ' ' | sed "s/^/seq -s' '/" | bash

例子:

$ cat 1.txt | tr '[]-' ' ' | sed "s/^/seq -s' '/" | bash
1 2 3 4 5 6 7 8 9
11 12
10 11 12 13 14 15
于 2013-03-29T07:24:22.127 回答
0

如果您确信您的输入都与该模式匹配:

while read a; do
  seq -s' ' $(echo "$a" | tr '[]-' ' ')
done

根据需要添加错误检查。

于 2013-03-29T07:14:16.617 回答
0

这是一个单行:

cat lines | sed -E -e 's/\[|]//g' -e 's/-/ /g' | xargs -n 2 seq -s ' ' -t '\n'

如:

$ cat <<EOF | sed -E -e 's/\[|]//g' -e 's/-/ /g' | xargs -n 2 seq -s ' ' -t '\n'
> [1-9]
> [11-12]
> [10-15]
> EOF
1 2 3 4 5 6 7 8 9
11 12
10 11 12 13 14 15
于 2013-03-29T07:22:04.903 回答