分页: 1 / 1
【求助】 文本处理之自动产生字符串'........'(已解)
发表于 : 2012-03-16 14:00
由 halfwolf
【求助】 文本处理之自动产生字符串'........'
在脚本运行过程中经常需要打印如下分割符号
............................................................................
---------------------------------------------------------
==================================
++++++++++++++++++++++++++++++++++
######################################
以前用的办法是
div=”............................................................................”
需要的时候
echo $div
这种方法的缺点:如果想美观,需要人工去数基本元素(.-=+#)的个数,由于本人最近既笨又懒,因此,想寻找一种通用做法,譬如定义
1、dotnum=45
2、用”.”和$dotnum处理得到$div<此处征集处理办法>
3、echo $div
得到和上面一样的效果。
请高手帮忙,谢谢!
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-16 14:03
由 枫叶饭团
写一个循环函数吧
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-16 14:10
由 halfwolf
谢谢!
#!/bin/bash
dotnum=45
dottype='.'
div=''
for i in `seq 1 $dotnum`
do
div=${dottype}$div
done
echo $div
有没有更优雅的办法?
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-16 14:12
由 枫叶饭团
要是python的话直接*。。。
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-16 14:46
由 aerofox
可以定义一个函数,这个函数应该不难,不多说。
如果宽度是确定的,变化的是符号,可以开始时定义其中一个,比如
代码: 全选
div=.............................................
然后在需要时换成别的字符显示:
如果符号是确定不变的,宽度要变,可以选子串显示:
如果二者都变,那么就可以综合上面两步:
代码: 全选
spaces=$(printf "%80s" " ") # 定义一个足够长的字符串当作模板
div=${spaces:0:45}
echo ${div// /.}
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-16 15:16
由 halfwolf
谢谢!
函数法
#!/bin/bash
function div(){
dotnum=$2
dottype=$1
div=''
for i in `seq 1 $dotnum`
do
div=$dottype$div
done
echo $div
}
div . 45
div - 45
div + 45
div = 45
div '&' 45
div '#' 45
应该有单行解决方案!呵呵
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-16 15:37
由 aerofox
函数法已经应该算是单行解决方案了,因为函数只需要定义一次,使用时是单行的。
表面上的单行未必是好的办法,例如下面也是单行的办法,但显然效率不高:
代码: 全选
dd if=/dev/zero bs=$dotnum count=1 2> /dev/null | sed 's/././g;s/$/\n/'
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-16 19:51
由 naturalaw
我倾向于使用函数,模块化。
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-16 19:53
由 月下叹逍遥
上循环
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-17 20:08
由 fnan
n=15;c='*';sed -r "s/[^ ]+ ?/$c/g" <<<$(seq $n)
#方案之一。
n=3;c='*';div=$(seq -s$c $n|tr -d 0-9)$c;echo "$div"
n=3;c='*';echo "$(seq -s$c $n|tr -d 0-9)$c"
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-17 20:58
由 Strange
如果是linux下的脚本,上perl吧,反正各种linux标配
代码: 全选
perl -e "print '-' x 80"
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-17 21:58
由 lilydjwg
Strange 写了:如果是linux下的脚本,上perl吧,反正各种linux标配
代码: 全选
perl -e "print '-' x 80"
代码: 全选
python3 -c 'print("-" * 80)'
代码: 全选
ghc -e "putStrLn $ replicate 80 '-'"
代码: 全选
ruby -e 'puts "-" * 80'
Ruby 的乘号两边的操作数不能反过来,Python 的可以。
Re: 【求助】 文本处理之自动产生字符串'........'
发表于 : 2012-03-19 14:42
由 halfwolf
谢谢诸位,我试着解读一下,见笑了
fnan兄弟的方法主要由两部分构成(譬如我打印45个*,则可用seq -s'*' 0 45|tr -d 0-9),如下
1、seq -s'*' 0 45
0*1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18*19*20*21*22*23*24*25*26*27*28*29*30*31*32*33*34*35*36*37*38*39*40*41*42*43*44*45
2、tr -d 0-9 即删除数字部分
*********************************************
还有一种办法与fnan兄弟的方法有异曲同工之妙,如下
printf '*%.0s' {1..45}
{1..45} 重复打印,循环送入1,2,……,45的数字;
%.0s 按字符打印,字符宽度为0;
Strange兄弟和lilydjwg兄弟的perl/python/ghc/ruby解法更加简洁明了,已收下,谢谢!
Re: 【求助】 文本处理之自动产生字符串'........'(已解)
发表于 : 2012-03-19 21:29
由 fnan
printf "%c" '*'{1..45}
#异曲同工。
Re: 【求助】 文本处理之自动产生字符串'........'(已解)
发表于 : 2012-03-20 21:40
由 lilydjwg
再来个 zsh 版的:
代码: 全选
print -- ${(l.80..-.)}
l 标志表示进行左对齐。这里没有给出参数(parameter),因此它将空字符串按 80 字符左对齐,以「-」填充。