📄 ch30_09.htm
字号:
<HTML><!--Distributed by F --><HEAD><TITLE>[Chapter 30] 30.9 Using Search Patterns and Global Commands</TITLE><METANAME="DC.title"CONTENT="UNIX Power Tools"><METANAME="DC.creator"CONTENT="Jerry Peek, Tim O'Reilly & Mike Loukides"><METANAME="DC.publisher"CONTENT="O'Reilly & Associates, Inc."><METANAME="DC.date"CONTENT="1998-08-04T21:45:23Z"><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="ch30_01.htm"TITLE="30. vi Tips and Tricks"><LINKREL="prev"HREF="ch30_08.htm"TITLE="30.8 Get Back What You Deleted with Numbered Buffers"><LINKREL="next"HREF="ch30_10.htm"TITLE="30.10 Confirming Substitutions in ex and vi"></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="ch30_08.htm"TITLE="30.8 Get Back What You Deleted with Numbered Buffers"><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 30.8 Get Back What You Deleted with Numbered Buffers"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1">Chapter 30<BR>vi Tips and Tricks</FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch30_10.htm"TITLE="30.10 Confirming Substitutions in ex and vi"><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 30.10 Confirming Substitutions in ex and vi"BORDER="0"></A></TD></TR></TABLE> <HRALIGN="LEFT"WIDTH="515"TITLE="footer"></DIV><DIVCLASS="SECT1"><H2CLASS="sect1"><ACLASS="title"NAME="UPT-ART-6170">30.9 Using Search Patterns and Global Commands</A></H2><PCLASS="para">Besides using line numbers and address symbols<ACLASS="indexterm"NAME="AUTOID-32951"></A><ACLASS="indexterm"NAME="AUTOID-32954"></A><ACLASS="indexterm"NAME="AUTOID-32957"></A><ACLASS="indexterm"NAME="AUTOID-32960"></A>(<CODECLASS="literal">.</CODE>, <CODECLASS="literal">$</CODE>, <CODECLASS="literal">%</CODE>),<EMCLASS="emphasis">ex</EM> (including the <EMCLASS="emphasis">ex</EM> mode of <EMCLASS="emphasis">vi</EM>, of course)can address lines by using<SPANCLASS="link">search patterns (<ACLASS="linkend"HREF="ch26_01.htm#UPT-ART-7844"TITLE="That's an Expression ">26.1</A>)</SPAN>.For example:<DLCLASS="variablelist"><DTCLASS="term"><CODECLASS="literal">:/</CODE><CODECLASS="replaceable"><I>pattern</I></CODE><CODECLASS="literal">/d</CODE></DT><DDCLASS="listitem"><PCLASS="para">Deletes the next line containing <EMCLASS="emphasis">pattern</EM>.</P></DD><DTCLASS="term"><CODECLASS="literal">:/</CODE><CODECLASS="replaceable"><I>pattern</I></CODE><CODECLASS="literal">/+d</CODE></DT><DDCLASS="listitem"><PCLASS="para">Deletes the line <EMCLASS="emphasis">below</EM> the next line containing <EMCLASS="emphasis">pattern</EM>.(You could also use <CODECLASS="literal">+1</CODE> instead of <CODECLASS="literal">+</CODE> alone.)</P></DD><DTCLASS="term"><CODECLASS="literal">:/</CODE><CODECLASS="replaceable"><I>pattern1</I></CODE><CODECLASS="literal">/,/</CODE><CODECLASS="replaceable"><I>pattern2</I></CODE><CODECLASS="literal">/d</CODE></DT><DDCLASS="listitem"><PCLASS="para">Deletes from the next line (after the current line)that contains <EMCLASS="emphasis">pattern1</EM> through the next following line that contains <EMCLASS="emphasis">pattern2</EM>.</P></DD><DTCLASS="term"><CODECLASS="literal">:.,/</CODE><CODECLASS="replaceable"><I>pattern</I></CODE><CODECLASS="literal">/m23</CODE></DT><DDCLASS="listitem"><PCLASS="para">Takes text from current line (<CODECLASS="literal">.</CODE>) through the nextline containing <EMCLASS="emphasis">pattern</EM> and puts it after line 23.</P></DD></DL> </P><PCLASS="para">Note that patterns are delimited by a slash both <EMCLASS="emphasis">before</EM> and <EMCLASS="emphasis">after</EM>.</P><PCLASS="para">If you make deletions by pattern with <EMCLASS="emphasis">vi</EM> and <EMCLASS="emphasis">ex</EM>, there isa difference in the way the two editors operate. Suppose you have in your file <EMCLASS="emphasis">practice</EM> the lines:<TABLECLASS="informaltable"><TBODYCLASS="tbody"><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><BLOCKQUOTECLASS="screen"><PRECLASS="screen"> With a screen editor you can scroll the page, move the cursor, <UCLASS="cursor">d</U>elete lines, insert characters and more, while seeing results of your edits as you make them.</PRE></BLOCKQUOTE></TD></TR></TBODY></TABLE></P><PCLASS="para"><TABLECLASS="informaltable"><THEADCLASS="thead"><TRCLASS="row"VALIGN="TOP"><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1">Keystrokes</TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1">Results</TH></TR></THEAD><TBODYCLASS="tbody"><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><CODECLASS="literal">d/while</CODE></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><BLOCKQUOTECLASS="screen"><PRECLASS="screen"> With a screen editor you can scroll the page, move the cursor, <UCLASS="cursor">w</U>hile seeing results of your edits as you make them.</PRE></BLOCKQUOTE></TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">The <EMCLASS="emphasis">vi</EM> delete to <EMCLASS="emphasis">pattern</EM> command deletes from the cursor up to the word <EMCLASS="emphasis">while</EM> but leaves the remainder of both lines.</P></TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><CODECLASS="literal">:.,/while/d</CODE></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><BLOCKQUOTECLASS="screen"><PRECLASS="screen"> With a screen editor you can scroll the <UCLASS="cursor">o</U>f your edits as you make them.</PRE></BLOCKQUOTE></TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">The <EMCLASS="emphasis">ex</EM> command deletes the entire range of addressed lines; in this case both the current line and the line containing the pattern. All lines are deleted in their entirety.</P></TD></TR></TBODY></TABLE></P><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="UPT-ART-6170-SECT-1.1">30.9.1 Global Searches </A></H3><PCLASS="para">In <EMCLASS="emphasis">vi</EM> you use a <CODECLASS="literal">/</CODE> (slash) to search forpatterns of characters in your files. By contrast, <EMCLASS="emphasis">ex</EM> has a <ACLASS="indexterm"NAME="AUTOID-33067"></A>global command, <CODECLASS="literal">g</CODE>, that lets you search fora pattern and display all lines containing the pattern when it findsthem.The command <CODECLASS="literal">:g!</CODE> does the opposite of <CODECLASS="literal">:g</CODE>. Use<CODECLASS="literal">:g!</CODE> (or its synonym <CODECLASS="literal">:v</CODE>) to search for all lines thatdo <EMCLASS="emphasis">not</EM> contain <EMCLASS="emphasis">pattern</EM>.</P><PCLASS="para">You can use the global command on all lines in the file, or you canuse line addresses to limit a global search to specified lines or to arange of lines.</P><DLCLASS="variablelist"><DTCLASS="term"><CODECLASS="literal">:g/</CODE><CODECLASS="replaceable"><I>pattern</I></CODE><CODECLASS="literal">/</CODE></DT><DDCLASS="listitem"><PCLASS="para">Finds (moves to) the last occurrence of <EMCLASS="emphasis">pattern</EM> in the file.</P></DD><DTCLASS="term"><CODECLASS="literal">:g/</CODE><CODECLASS="replaceable"><I>pattern</I></CODE><CODECLASS="literal">/p</CODE></DT><DDCLASS="listitem"><PCLASS="para">Finds and displays all lines in the file containing <EMCLASS="emphasis">pattern</EM>.</P></DD><DTCLASS="term"><CODECLASS="literal">:g!/</CODE><CODECLASS="replaceable"><I>pattern</I></CODE><CODECLASS="literal">/nu</CODE></DT><DDCLASS="listitem"><PCLASS="para">Finds and displays all lines in the file that don't contain <EMCLASS="emphasis">pattern</EM>;also displays line number for each line found.</P></DD><DTCLASS="term"><CODECLASS="literal">:60,124g/</CODE><CODECLASS="replaceable"><I>pattern</I></CODE><CODECLASS="literal">/p</CODE></DT><DDCLASS="listitem"><PCLASS="para"> Finds and displays any lines between lines 60 and 124 containing<EMCLASS="emphasis">pattern</EM>.</P></DD></DL><PCLASS="para"><CODECLASS="literal">g</CODE> can also be used for global replacements.For example, to search for all lines that begin with <CODECLASS="literal">WARNING:</CODE> andchange the first word <CODECLASS="literal">not</CODE> on those lines to <CODECLASS="literal">NOT</CODE>:</P><PCLASS="para"><TABLECLASS="screen.co"BORDER="1"><TR><THVALIGN="TOP"><PRECLASS="calloutlist"><ACLASS="co"HREF="ch26_04.htm"TITLE="26.4 Using Metacharacters in Regular Expressions ">\<..\></A> </PRE></TH><TDVALIGN="TOP"><PRECLASS="screen">:g/^WARNING:/s/\<not\>/NOT/</PRE></TD></TR></TABLE></P></DIV><DIVCLASS="sect1info"><PCLASS="SECT1INFO">- <SPANCLASS="authorinitials">LL</SPAN> <SPANCLASS="bibliomisc">from O'Reilly & Associates' <CITECLASS="citetitle">Learning the vi Editor</CITE>, Chapter 5</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="ch30_08.htm"TITLE="30.8 Get Back What You Deleted with Numbered Buffers"><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 30.8 Get Back What You Deleted with Numbered Buffers"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="ch30_10.htm"TITLE="30.10 Confirming Substitutions in ex and vi"><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 30.10 Confirming Substitutions in ex and vi"BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172">30.8 Get Back What You Deleted with Numbered Buffers</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">30.10 Confirming Substitutions in ex and vi</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 & 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 + -