Linux Bash 程序题解

问题描述:

设计一个程序 cuts,它由标准输入读取数据,获取由第一个参数 n 和第二个参数 m 所限定范围的数据,n 和 m 都是整数,即从输入的字符串中抽取第 n 个字符至第 m 个字符之间的所有字符(包括这两个字符)。例如:

$ cuts 11 14
this is a test of cuts program # 输入
test  # 显示结果

方案一:

利用bash的参数展开语法:
${parameter:offset:length}

#!/bin/bash 
offset=${1:-1}
offset=`expr $offset - 1`
right=${2:-1}
length=`expr $right - $offset`
read input
echo ${input:$offset:$length}

方案二:

利用 cut 命令:cut -c N-M

NAME
       cut - remove sections from each line of files

SYNOPSIS
       cut OPTION... [FILE]...

DESCRIPTION
       Print selected parts of lines from each FILE to standard output.

       -c, --characters=LIST
              select only these characters

Each LIST is  made  up  of  one
       range,  or  many ranges separated by commas.  Selected input is written
       in the same order that it is read, and is written exactly  once.   Each
       range is one of:

       N      N’th byte, character or field, counted from 1

       N-     from N’th byte, character or field, to end of line

       N-M    from N’th to M’th (included) byte, character or field

       -M     from first to M’th (included) byte, character or field

       With no FILE, or when FILE is -, read standard input.
#!/bin/bash 
N=${1:-1}
M=${2:-1}

read input 
echo $input | cut -c $N-$M

你可能感兴趣的:(linux,bash)