⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch27_12.htm

📁 the unix power tools
💻 HTM
字号:
<HTML><!--Distributed by F --><HEAD><TITLE>[Chapter 27] 27.12 Make Custom grep Commands (etc.) with perl </TITLE><METANAME="DC.title"CONTENT="UNIX Power Tools"><METANAME="DC.creator"CONTENT="Jerry Peek, Tim O'Reilly &amp; Mike Loukides"><METANAME="DC.publisher"CONTENT="O'Reilly &amp; Associates, Inc."><METANAME="DC.date"CONTENT="1998-08-04T21:44:29Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-260-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch27_01.htm"TITLE="27. Searching Through Files"><LINKREL="prev"HREF="ch27_11.htm"TITLE="27.11 A Multiline Context grep Using sed "><LINKREL="next"HREF="ch27_13.htm"TITLE="27.13 More grep-like Programs Written in Perl "></HEAD><BODYBGCOLOR="#FFFFFF"TEXT="#000000"><DIVCLASS="htmlnav"><H1><IMGSRC="gifs/smbanner.gif"ALT="UNIX Power Tools"USEMAP="#srchmap"BORDER="0"></H1><MAPNAME="srchmap"><AREASHAPE="RECT"COORDS="0,0,466,58"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="467,0,514,18"HREF="jobjects/fsearch.htm"ALT="Search this book"></MAP><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch27_11.htm"TITLE="27.11 A Multiline Context grep Using sed "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 27.11 A Multiline Context grep Using sed "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1">Chapter 27<BR>Searching Through Files</FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch27_13.htm"TITLE="27.13 More grep-like Programs Written in Perl "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 27.13 More grep-like Programs Written in Perl "BORDER="0"></A></TD></TR></TABLE>&nbsp;<HRALIGN="LEFT"WIDTH="515"TITLE="footer"></DIV><DIVCLASS="SECT1"><H2CLASS="sect1"><ACLASS="title"NAME="UPT-ART-5530">27.12 Make Custom grep Commands (etc.) with perl </A></H2><PCLASS="para"><ACLASS="indexterm"NAME="UPT-ART-5530-IX-GREP-COMMAND-CUSTOMIZING-WITH-PERL"></A><ACLASS="indexterm"NAME="UPT-ART-5530-IX-PERL-CUSTOMIZING-GREP-WITH"></A><ACLASS="indexterm"NAME="UPT-ART-5530-IX-CUSTOMIZING-GREP-COMMANDS"></A><ACLASS="indexterm"NAME="UPT-ART-5530-IX-FILES-SEARCHING-GREP-COMMAND"></A>All of the various <EMCLASS="emphasis">grep</EM>-like utilities perform pretty much thesame function, with minor differences&nbsp;- they search for a specifiedpattern in some or all of a file, and then display that pattern withvarying amounts of surrounding context.</P><TABLECLASS="para.programreference"BORDER="1"><TR><THVALIGN="TOP"><ACLASS="programreference"HREF="examples/index.htm"TITLE="perl">perl</A><BR></TH><TDVALIGN="TOP">As you use UNIX more and more, you will find yourself wanting to do anincreasing number of <EMCLASS="emphasis">grep</EM>-like tasks, but no particular UNIXutility will quite suit them all (hence the need for the various<EMCLASS="emphasis">grep</EM> utilities discussed earlier in this section). You'll startaccumulating C programs, <EMCLASS="emphasis">awk</EM> scripts, and shell scripts to do thesedifferent tasks, and you'll be craving one utility that can easilyencompass them all so you don't have to waste the disk space for allof those binaries. That utility is <SPANCLASS="link">Perl (<ACLASS="linkend"HREF="ch37_01.htm#UPT-ART-5560"TITLE="What We Do and Don't Tell You About Perl ">37.1</A>)</SPAN>,the &quot;PracticalExtraction and Report Language&quot; developed by Larry Wall. According to thedocumentation accompanying Perl, it is &quot;an interpreted languageoptimized for scanning arbitrary text files, extracting informationfrom those text files, and printing reports based on thatinformation.&quot;  If you don't already have <EMCLASS="emphasis">perl</EM> installedon your system, you can get it from the CD-ROM.  &#13;</TD></TR></TABLE><PCLASS="para">For example, to search for a pattern in the header of a Usenet message:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">perl -ne 'exit if (/^$/); print if (/<CODECLASS="replaceable"><I>pattern</I></CODE>/);' <CODECLASS="replaceable"><I>filename</I></CODE></PRE></BLOCKQUOTE></P><PCLASS="para">[This works because<SPANCLASS="link">mail and Usenet (<ACLASS="linkend"HREF="ch01_33.htm"TITLE="UNIX Networking and Communications ">1.33</A>)</SPAN>messages always use a blankline&nbsp;- indicated by <CODECLASS="literal">^$</CODE> in regular expression syntax&nbsp;- to separate theheader from the body of the message. -<EMCLASS="emphasis">TOR</EM>&nbsp;]</P><PCLASS="para">To do a search for a pattern and print the paragraphs in which itappears:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">perl -ne '$/ = &quot;\n\n&quot;; print if (/<CODECLASS="replaceable"><I>pattern</I></CODE>/);' <CODECLASS="replaceable"><I>filename</I></CODE></PRE></BLOCKQUOTE></P><PCLASS="para">[This assumes that paragraphs are delimited by a double linefeed&nbsp;- thatis, a blank line.You'd have toadjust this script for a <EMCLASS="emphasis">troff</EM> or TeX document whereparagraphs are separated by special codes. -<EMCLASS="emphasis">TOR</EM>&nbsp;]</P><PCLASS="para">Searching through files is one of Perl's strengths, but certainlynot its only strength. Perl encompasses all of the functionality of<EMCLASS="emphasis">sed</EM>, <EMCLASS="emphasis">awk</EM>, <EMCLASS="emphasis">grep</EM>, <EMCLASS="emphasis">find</EM>, and other UNIX utilities.Furthermore, a Perl program to do something originally done withone or more of these utilities is usually faster and easier to readthan the non-Perl solution.[I agree that Perl is usually faster than a bunch of separate UNIXutilities strung together by pipes and temporary files.It also beats many utilities running standalone.But, in my experience, <EMCLASS="emphasis">sed</EM> beats Perl's running speed almostevery time.That could be partly because I have a slow disk, and the 40-kbtye<EMCLASS="emphasis">sed</EM> binary takes less time to load than the 700-kbtye Perl 5binary.Make your own tests, and I'll make room for Jonathan's rebuttal inthe third edition of this book. <CODECLASS="literal">;-)</CODE> <EMCLASS="emphasis">-JP</EM>]</P><DIVCLASS="sect1info"><PCLASS="SECT1INFO">- <SPANCLASS="authorinitials">JIK</SPAN></P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch27_11.htm"TITLE="27.11 A Multiline Context grep Using sed "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 27.11 A Multiline Context grep Using sed "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="book"HREF="index.htm"TITLE="UNIX Power Tools"><IMGSRC="gifs/txthome.gif"SRC="gifs/txthome.gif"ALT="UNIX Power Tools"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch27_13.htm"TITLE="27.13 More grep-like Programs Written in Perl "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 27.13 More grep-like Programs Written in Perl "BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172">27.11 A Multiline Context grep Using sed </TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="index"HREF="index/idx_0.htm"TITLE="Book Index"><IMGSRC="gifs/index.gif"SRC="gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172">27.13 More grep-like Programs Written in Perl </TD></TR></TABLE><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><IMGSRC="gifs/smnavbar.gif"SRC="gifs/smnavbar.gif"USEMAP="#map"BORDER="0"ALT="The UNIX CD Bookshelf Navigation"><MAPNAME="map"><AREASHAPE="RECT"COORDS="0,0,73,21"HREF="../index.htm"ALT="The UNIX CD Bookshelf"><AREASHAPE="RECT"COORDS="74,0,163,21"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="164,0,257,21"HREF="../unixnut/index.htm"ALT="UNIX in a Nutshell"><AREASHAPE="RECT"COORDS="258,0,321,21"HREF="../vi/index.htm"ALT="Learning the vi Editor"><AREASHAPE="RECT"COORDS="322,0,378,21"HREF="../sedawk/index.htm"ALT="sed &amp; awk"><AREASHAPE="RECT"COORDS="379,0,438,21"HREF="../ksh/index.htm"ALT="Learning the Korn Shell"><AREASHAPE="RECT"COORDS="439,0,514,21"HREF="../lrnunix/index.htm"ALT="Learning the UNIX Operating System"></MAP></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -