【求助】 文本处理之自动产生字符串'........'(已解)

sh/bash/dash/ksh/zsh等Shell脚本
回复
halfwolf
帖子: 40
注册时间: 2012-01-28 21:27

【求助】 文本处理之自动产生字符串'........'(已解)

#1

帖子 halfwolf » 2012-03-16 14:00

【求助】 文本处理之自动产生字符串'........'

在脚本运行过程中经常需要打印如下分割符号
............................................................................
---------------------------------------------------------
==================================
++++++++++++++++++++++++++++++++++
######################################

以前用的办法是
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: 【求助】 文本处理之自动产生字符串'........'

#2

帖子 枫叶饭团 » 2012-03-16 14:03

写一个循环函数吧
halfwolf
帖子: 40
注册时间: 2012-01-28 21:27

Re: 【求助】 文本处理之自动产生字符串'........'

#3

帖子 halfwolf » 2012-03-16 14:10

谢谢!


#!/bin/bash

dotnum=45
dottype='.'
div=''

for i in `seq 1 $dotnum`
do
div=${dottype}$div
done
echo $div

:em04

有没有更优雅的办法?
上次由 halfwolf 在 2012-03-16 14:31,总共编辑 3 次。
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 【求助】 文本处理之自动产生字符串'........'

#4

帖子 枫叶饭团 » 2012-03-16 14:12

要是python的话直接*。。。
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 【求助】 文本处理之自动产生字符串'........'

#5

帖子 aerofox » 2012-03-16 14:46

可以定义一个函数,这个函数应该不难,不多说。

如果宽度是确定的,变化的是符号,可以开始时定义其中一个,比如

代码: 全选

div=.............................................
然后在需要时换成别的字符显示:

代码: 全选

echo ${div//./#}
如果符号是确定不变的,宽度要变,可以选子串显示:

代码: 全选

echo ${div:0:20}
如果二者都变,那么就可以综合上面两步:

代码: 全选

spaces=$(printf "%80s" " ")    # 定义一个足够长的字符串当作模板
div=${spaces:0:45}
echo ${div// /.}
halfwolf
帖子: 40
注册时间: 2012-01-28 21:27

Re: 【求助】 文本处理之自动产生字符串'........'

#6

帖子 halfwolf » 2012-03-16 15:16

谢谢!

函数法

#!/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

:em06

应该有单行解决方案!呵呵
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 【求助】 文本处理之自动产生字符串'........'

#7

帖子 aerofox » 2012-03-16 15:37

函数法已经应该算是单行解决方案了,因为函数只需要定义一次,使用时是单行的。

表面上的单行未必是好的办法,例如下面也是单行的办法,但显然效率不高:

代码: 全选

dd if=/dev/zero bs=$dotnum count=1 2> /dev/null | sed 's/././g;s/$/\n/'
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 【求助】 文本处理之自动产生字符串'........'

#8

帖子 naturalaw » 2012-03-16 19:51

我倾向于使用函数,模块化。
  • The eternal law
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: 【求助】 文本处理之自动产生字符串'........'

#9

帖子 月下叹逍遥 » 2012-03-16 19:53

上循环
浮生七十今三十,从此凄惶未可知
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 【求助】 文本处理之自动产生字符串'........'

#10

帖子 fnan » 2012-03-17 20:08

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"
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

Re: 【求助】 文本处理之自动产生字符串'........'

#11

帖子 Strange » 2012-03-17 20:58

如果是linux下的脚本,上perl吧,反正各种linux标配

代码: 全选

perl -e "print '-' x 80"
ニンニク入れますか?
x60 with gentoo
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 【求助】 文本处理之自动产生字符串'........'

#12

帖子 lilydjwg » 2012-03-17 21:58

Strange 写了:如果是linux下的脚本,上perl吧,反正各种linux标配

代码: 全选

perl -e "print '-' x 80"

代码: 全选

python3 -c 'print("-" * 80)'

代码: 全选

ghc -e "putStrLn $ replicate 80 '-'"

代码: 全选

ruby -e 'puts "-" * 80'
Ruby 的乘号两边的操作数不能反过来,Python 的可以。
halfwolf
帖子: 40
注册时间: 2012-01-28 21:27

Re: 【求助】 文本处理之自动产生字符串'........'

#13

帖子 halfwolf » 2012-03-19 14:42

谢谢诸位,我试着解读一下,见笑了

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
帖子: 919
注册时间: 2009-07-01 22:04

Re: 【求助】 文本处理之自动产生字符串'........'(已解)

#14

帖子 fnan » 2012-03-19 21:29

printf "%c" '*'{1..45}
#异曲同工。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 【求助】 文本处理之自动产生字符串'........'(已解)

#15

帖子 lilydjwg » 2012-03-20 21:40

再来个 zsh 版的:

代码: 全选

print -- ${(l.80..-.)}
l 标志表示进行左对齐。这里没有给出参数(parameter),因此它将空字符串按 80 字符左对齐,以「-」填充。
回复