我有一个包含以下内容的文件/字符串:
[1-9]
[11-12]
[10-15]
然后我想扩展它成为这个:
1 2 3 4 5 6 7 8 9
11 12
10 11 12 13 14 15
我知道如何在很长的路上完成它(首先捕获两个数字,然后使用for循环展开它们。)
我想知道是否有更快/更聪明的方法来实现同样的目标。
答案 0 :(得分:2)
单向:(纯粹的bash解决方案)
while IFS=- read l1 l2
do
eval echo ${l1/[/{}".."${l2/]/}}
done < file
答案 1 :(得分: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
答案 2 :(得分:0)
如果您确信您的输入符合该模式:
while read a; do
seq -s' ' $(echo "$a" | tr '[]-' ' ')
done
根据需要添加错误检查。
答案 3 :(得分: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