免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1488 | 回复: 7
打印 上一主题 下一主题

一个打印问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-06 16:34 |只看该作者 |倒序浏览
一个文件里面有100页,是否有办法打印其中的某几页.
换页符是"\L"。

论坛徽章:
0
2 [报告]
发表于 2003-05-06 17:31 |只看该作者

一个打印问题!

cat $file | sed -n '/^L/=' >/tmp/q1.$$
page_1=$1; line_1=`cat /tmp/q1.$$ | sed -n "${page_1}p"`
page_2=`expr $2 + 1 `; line_2=`cat /tmp/q1.$$ | sed -n "${page_2}p"`
cat $file | sed -n "${line_1},${line_2}p" | sed '$d'
rm /tmp/q1.$$
~
~

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-05-06 18:48 |只看该作者

一个打印问题!

sed代码 -- 略过n页,打印后面的m页:
  1. sed -ne '1h;2,$H;${x;s/^\([^^L]*^L\)\{n\}//;s/\(\([^^L]*^L\)\{m\}\).*/\1/p;}'
复制代码

测试环境:GNU sed version 3.02
上面的“^L”为换页符,可以用ctrl-v然后ctrl-l输入。
如果是用gsed 3.02.80以上版本,可以直接用"\f"代表换页符:
  1. sed ':start;${s/^\([^\f]*\f\)\{n\}//;s/\(\([^\f]*\f\)\{m\}\).*/\1/;};N;b start'
复制代码

测试环境:GNU sed version 4.0.7。可以根据自己sed的版本选择一上两个单行sed脚本之一。

论坛徽章:
0
4 [报告]
发表于 2003-05-06 21:00 |只看该作者

一个打印问题!

scounix5.0.5测试
  1. #!/bin/sh
  2. #filename PrintSelpg
  3. if [ $# -ne 3 ]
  4. then
  5. echo Ussage : ${0} filename startpage endpage
  6. else
  7.         sed -n -e '/^L/=' $1 >/tmp/num0
  8.         eval `echo sed "-n" \"$2","$3"p"\" "/tmp/num0 >/tmp/num1"`
  9.         st=`sed -n '1p' /tmp/num1`;st=`expr $st + 1`
  10.         nd=`sed -n '$p' /tmp/num1`;nd=`expr $nd - 1`
  11.         eval `echo "sed -n '"${st}","${nd}"p' ${1}"`
  12.         rm -f /tmp/num?
  13. fi
复制代码

论坛徽章:
0
5 [报告]
发表于 2003-05-07 12:13 |只看该作者

一个打印问题!

muzx     我用了你的办法, 但是文本的第一页打不出来!!

论坛徽章:
0
6 [报告]
发表于 2003-05-07 18:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2003-05-07 19:13 |只看该作者

一个打印问题!

是的!原代码不能输出第一页,现作如下修改:
  1. #!/bin/sh
  2. #filename PrintSelpg
  3. if [ $# -ne 3 ]
  4. then
  5. echo Ussage : ${0} filename startpage endpage+1
  6. else
  7.         sed -n -e '/^L/=' $1 >>/tmp/num0
  8.         eval `echo sed "-n" \"$2","$3"p"\" "/tmp/num0 >/tmp/num1"`
  9.         if [ "$2" -eq 1 ]
  10.         then
  11.                 st=1
  12.         else
  13.                 st=`sed -n '1p' /tmp/num1`;st=`expr $st + 1`
  14.         fi
  15.         nd=`sed -n '$p' /tmp/num1`;nd=`expr $nd - 1`
  16.         eval `echo "sed -n '"${st}","${nd}"p' ${1}"`
  17.         rm -f /tmp/num?
  18. fi
复制代码

如果打印文件“file”第一页,则:
  1. printselpg  file  1  2
复制代码

如果打印第二~五页,则:
  1. printselpg  file  2  6
复制代码

即,程序调用方式:
  1. printselpg   文件名  打印起始页码  结束页码+1
复制代码

论坛徽章:
0
8 [报告]
发表于 2003-05-07 21:50 |只看该作者

一个打印问题!

谢谢!!muzx
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP