【求助】 文本处理之自动产生字符串'........'(已解)
-
- 帖子: 40
- 注册时间: 2012-01-28 21:27
【求助】 文本处理之自动产生字符串'........'(已解)
【求助】 文本处理之自动产生字符串'........'
在脚本运行过程中经常需要打印如下分割符号
............................................................................
---------------------------------------------------------
==================================
++++++++++++++++++++++++++++++++++
######################################
以前用的办法是
div=”............................................................................”
需要的时候
echo $div
这种方法的缺点:如果想美观,需要人工去数基本元素(.-=+#)的个数,由于本人最近既笨又懒,因此,想寻找一种通用做法,譬如定义
1、dotnum=45
2、用”.”和$dotnum处理得到$div<此处征集处理办法>
3、echo $div
得到和上面一样的效果。
请高手帮忙,谢谢!
在脚本运行过程中经常需要打印如下分割符号
............................................................................
---------------------------------------------------------
==================================
++++++++++++++++++++++++++++++++++
######################################
以前用的办法是
div=”............................................................................”
需要的时候
echo $div
这种方法的缺点:如果想美观,需要人工去数基本元素(.-=+#)的个数,由于本人最近既笨又懒,因此,想寻找一种通用做法,譬如定义
1、dotnum=45
2、用”.”和$dotnum处理得到$div<此处征集处理办法>
3、echo $div
得到和上面一样的效果。
请高手帮忙,谢谢!
上次由 halfwolf 在 2012-03-19 14:43,总共编辑 1 次。
- 枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
- 联系:
Re: 【求助】 文本处理之自动产生字符串'........'
写一个循环函数吧
-
- 帖子: 40
- 注册时间: 2012-01-28 21:27
Re: 【求助】 文本处理之自动产生字符串'........'
谢谢!
#!/bin/bash
dotnum=45
dottype='.'
div=''
for i in `seq 1 $dotnum`
do
div=${dottype}$div
done
echo $div
有没有更优雅的办法?
#!/bin/bash
dotnum=45
dottype='.'
div=''
for i in `seq 1 $dotnum`
do
div=${dottype}$div
done
echo $div

有没有更优雅的办法?
上次由 halfwolf 在 2012-03-16 14:31,总共编辑 3 次。
- 枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
- 联系:
Re: 【求助】 文本处理之自动产生字符串'........'
要是python的话直接*。。。
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 【求助】 文本处理之自动产生字符串'........'
可以定义一个函数,这个函数应该不难,不多说。
如果宽度是确定的,变化的是符号,可以开始时定义其中一个,比如
然后在需要时换成别的字符显示:
如果符号是确定不变的,宽度要变,可以选子串显示:
如果二者都变,那么就可以综合上面两步:
如果宽度是确定的,变化的是符号,可以开始时定义其中一个,比如
代码: 全选
div=.............................................
代码: 全选
echo ${div//./#}
代码: 全选
echo ${div:0:20}
代码: 全选
spaces=$(printf "%80s" " ") # 定义一个足够长的字符串当作模板
div=${spaces:0:45}
echo ${div// /.}
-
- 帖子: 40
- 注册时间: 2012-01-28 21:27
Re: 【求助】 文本处理之自动产生字符串'........'
谢谢!
函数法
#!/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
应该有单行解决方案!呵呵
函数法
#!/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

应该有单行解决方案!呵呵
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 【求助】 文本处理之自动产生字符串'........'
函数法已经应该算是单行解决方案了,因为函数只需要定义一次,使用时是单行的。
表面上的单行未必是好的办法,例如下面也是单行的办法,但显然效率不高:
表面上的单行未必是好的办法,例如下面也是单行的办法,但显然效率不高:
代码: 全选
dd if=/dev/zero bs=$dotnum count=1 2> /dev/null | sed 's/././g;s/$/\n/'
- naturalaw
- 帖子: 1360
- 注册时间: 2011-09-06 22:04
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 【求助】 文本处理之自动产生字符串'........'
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"
#方案之一。
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"
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
- Strange
- 帖子: 1824
- 注册时间: 2006-05-19 9:54
- 来自: Shanghai
Re: 【求助】 文本处理之自动产生字符串'........'
如果是linux下的脚本,上perl吧,反正各种linux标配
代码: 全选
perl -e "print '-' x 80"
ニンニク入れますか?
x60 with gentoo
x60 with gentoo
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 【求助】 文本处理之自动产生字符串'........'
-
- 帖子: 40
- 注册时间: 2012-01-28 21:27
Re: 【求助】 文本处理之自动产生字符串'........'
谢谢诸位,我试着解读一下,见笑了
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解法更加简洁明了,已收下,谢谢!
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解法更加简洁明了,已收下,谢谢!
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 【求助】 文本处理之自动产生字符串'........'(已解)
printf "%c" '*'{1..45}
#异曲同工。
#异曲同工。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 【求助】 文本处理之自动产生字符串'........'(已解)
再来个 zsh 版的:
l 标志表示进行左对齐。这里没有给出参数(parameter),因此它将空字符串按 80 字符左对齐,以「-」填充。
代码: 全选
print -- ${(l.80..-.)}