您的位置:首页 > 运维架构 > Shell

Linux Bash 程序题解

2016-03-30 17:55 591 查看

问题描述:

设计一个程序 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: