我正在处理一个文本文件,该文件具有以下几种形式的语句
'0'...'7'
或者
'0'...'9'
甚至
'a'...'j'
(成语“ ...”仅出现在这些结构中),我想将其转换为以下形式的语句:
'0' '1' '2' '3' '4' '5' '6' '7'
我可以用vim marcos做到这一点,相当可爱,或者敲一些python,但是我想从命令行完成。我可以得到一个推荐的起点吗?我怀疑可以完成一些sed魔术,但是我无法解决……
bash有一个序列运算符,您可以使用:
sequence () {
read start finish <<< "${1/.../ }"
start=${start//\'/}
finish=${finish//\'/}
eval echo {$start..$finish}
}
while read line; do
sequence "$line"
done << END
'0'...'7'
'0'...'9'
'a'...'j'
END
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8 9
a b c d e f g h i j
我必须使用,eval
因为bash会在扩展变量之前尝试扩展序列。参见http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句