Winter实验室: 强大的Sed命令--背唐诗的Shell小程序

来源:百度文库 编辑:神马文学网 时间:2024/04/27 13:45:44
强大的Sed命令--背唐诗的Shell小程序
Sed命令是Unix/Linux平台上的行编辑工具,正确使用Sed命令可以达到你意想不到效果。
这里就有一个很有意思的例子,请看题:
现在有300多首唐诗放在一个文本文件中,格式是用"% 。。。%"分开,中间是一首唐诗,例如:%
%
《西施咏》
作者:王维
艳色天下重,西施宁久微。
朝为越溪女,暮作吴宫妃。
贱日岂殊众,贵来方悟稀。
邀人傅粉粉,不自著罗衣。
君宠益娇态,君怜无是非。
当时浣纱伴,莫得同车归。
持谢邻家子,效颦安可希。
%
《秋登兰山寄张五》
作者:孟浩然
北山白云里,隐者自怡悦。
相望始登高,心随雁飞灭。
愁因薄暮起,兴是清秋发。
时见归村人,沙行渡头歇。
天边树若荠,江畔洲如月。
何当载酒来,共醉重阳节。
%
现在要求每次运行程序,系统会随机选一首唐诗打印出来。要是你会如何做?
看看我这段脚本,总共才20来行:
#!/bin/sh
DATAFILE=/home/wende/bin/tang300.u8
IDXFILE=$DATAFILE.idx.txt
if [ ! -e $IDXFILE ] ;then
grep -n "%" $DATAFILE | awk -F‘:‘ ‘{print $1}‘ > $IDXFILE;
fi
LINECNT=`wc -l $IDXFILE|awk ‘{print $1}‘`;
FIRST=`expr $RANDOM % $LINECNT`
let SECOND=$FIRST+1;
CMD="sed -n -e ‘$FIRST p‘ $IDXFILE";
start=`eval $CMD`
CMD="sed -n -e ‘$SECOND p‘ $IDXFILE";
end=`eval $CMD`
let start=$start+1
let end=$end-1;
CMD="sed -n -e ‘$start,$end p‘ $DATAFILE";
eval $CMD
看明白了吗?其中使用了sed, awk, grep, eval, expr, wc, let 等命令。如果你对这些命令不了解,可以看看:深入浅出Shell编程