免费注册 查看新帖 |

Chinaunix

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

AWK、SED、GREP、VI在AIX5.2下的MAN文档  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-19 16:59 |只看该作者 |倒序浏览
AWK、SED、GREP在AIX5.2下的MAN文档,是guevara要的!
偶也在学!贴出共勉!
偶觉得请教netman、valentine, admirer, r2007 几位老大及BJMM、michaelds 等前辈更直接些!
系统不同,有所差异,而且这几个工具都有专门的书籍介绍,肯定比MAN更全,所以仅供参考!

  1. awk 命令
  2. 用途
  3. 在文件中查找与模式匹配的行,然后在它们上面执行特定的操作。
  4. 语法
  5. awk [ -F Ere ] [ -v Assignment ] ... { -f ProgramFile | 'Program' } [ [ File ...
  6. | Assignment ... ] ] ...
  7. 描述
  8. awk 命令利用一组用户提供的指令来将一组文件和用户提供的扩展正则表达式比较,一次一行。然后在任何与扩展正则表达式匹配的行上执行操作。awk
  9. 处理的最大记录大小为 10KB。
  10. awk 命令的模式搜索比 grep 命令的搜索更常用,且它允许用户在输入文本行上执行多个操作。awk
  11. 命令编程语言不需要编译,并允许用户使用变量、数字函数、字符串函数和逻辑运算符。
  12. awk 命令受到 LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_NUMERIC、NLSPATH 和 PATH
  13. 环境变量的影响。
  14. 本章中包括以下主题:
  15.   awk 命令的输入
  16.   awk 命令的输出
  17.   通过记录和字段的文件处理
  18.   awk 命令编程语言
  19.     模式
  20.     操作
  21.     变量
  22.     特殊变量
  23.   标志
  24.   示例
  25. awk 命令的输入
  26. awk 命令采取两种类型的输入:输入文本文件和程序指令。
  27. 输入文本文件
  28. 搜索和操作在输入文本文件上执行。文件如下指定:
  29.   在命令行指定 File 变量。
  30.   修改特殊变量 ARGV 和 ARGC。
  31.   在缺省 File 变量的情况下提供标准输入。
  32. 如果用 File 变量指定多个文件,则文件以指定的顺序处理。
  33. 程序指令
  34. 用户提供的指令控制 awk 命令的操作。这些指令来自命令行的‘Program’变量或来自用 -f 标志和 ProgramFile
  35. 变量一起指定的文件。如果指定多个程序文件,这些文件以指定的顺序串联,且使用指令的生成的顺序。
  36. awk 命令的输出
  37. awk 命令从输入文本文件中的数据产生三种类型的输出:
  38.   选定的数据可以打印至标准输出,此输出完全同于输入文件。
  39.   输入文件的选定部分可以更改。
  40.   选定数据可以更改并可打印至标准输出,此输出可以同于或不同于输入文件的内容。
  41. 可以在同一个文件上执行所有三种类型的输出。awk 命令是别的编程语言允许用户重定向输出。
  42. 通过记录和字段的文件处理
  43. 文件以下列方式处理:
  44.   awk 命令扫描它的指令,并执行任何指定为在读取输入前发生的操作。
  45.   awk 编程语言中的 BEGIN 语句允许用于指定在读取第一个记录前要执行的一组指令。这对于初始化特殊变量特别有用。
  46.   从输入文件读取一个记录。
  47.   记录是由记录分隔符隔开的一组数据。记录分隔符的缺省值是换行字符,它使文件中的每一行成为一个单独的记录。记录分隔符可以通过设置 RS 特殊变量来更改。
  48.   记录是相对于 awk 命令的指令指定的每种模式比较。
  49.   命令指令可以指定应比较记录内的特定字段。缺省情况下,字段由空白区(空格或跳格)隔开。每个字段由一个字段变量表示。记录中的第一个字段指定为 $1
  50.   变量,第二个字段指定为 $2 变量,以此类推。整个记录指定为 $0 变量。字段分隔符可以通过在命令行使用 -F 标志或通过设置 FS 特殊变量来更改。FS
  51.   特殊变量可以设置为下列值:空格、单个字符或扩展正则表达式。
  52.   如果一个记录与一个模式相匹配,则任何与该模式相关的操作都在该记录上执行。
  53.   在记录和每个模式比较且执行了所有指定操作以后,从输入读取下一个记录;在从输入文件读取所有的记录之前,该进程重复。
  54.   如果已经指定了多个输入文件,则下一个文件打开,且在读取所有的输入文件之前,该进程重复。
  55.   在读取了最后一个文件中的最后一个记录后,awk 命令执行任何指定为在输入处理后发生的指令。
  56.   awk 编程语言中的 END 语句允许用户指定在读取最后一个记录后要执行的操作。这对于发送有关 awk 命令完成了什么工作的消息特别有用。
  57. awk 命令编程语言
  58. awk 命令编程语言由以下格式的语句构成:
  59. Pattern { Action }
  60. 如果一个记录与指定模式相匹配,或包含与该模式匹配的字段,则执行相关的操作。可以指定没有操作的模式,这种情况下,包含该模式的整行写至标准输出。为每个输入记录执行指定的没有模式的操作。
  61. 模式
  62. 在 awk 命令语言语法中使用四种类型的模式:
  63.   正则表达式
  64.   关系表达式
  65.   模式的组合
  66.   BEGIN 和 END 模式
  67. 正则表达式
  68. awk 命令使用的扩展正则表达式类似于 grep 或 egrep 命令使用的表达式。扩展正则表达式的最简单的形式就是包括在斜杠中的一串字符。例如,假定一个名为
  69. testfile 的文件具有以下内容:
  70. smawley, andy
  71. smiley, allen
  72. smith, alan
  73. smithern, harry
  74. smithhern, anne
  75. smitters, alexis
  76. 输入以下一行命令:
  77. awk '/smi/' testfile
  78. 将把包含 smi 字符串的具体值的所有记录打印至标准输出。在这个示例中,awk 命令的程序 '/smi/' 是一个没有操作的模式。输出是:
  79. smiley, allen
  80. smith, alan
  81. smithern, harry
  82. smithhern, anne
  83. smitters, alexis
  84. 以下特殊字符用于形成扩展正则表达式:
  85.       字符功能
  86.       +指定如果一个或多个字符或扩展正则表达式的具体值(在 +(加号)前)在这个字符串中,则字符串匹配。命令行:
  87. awk '/smith+ern/' testfile
  88.       将包含字符 smit,后跟一个或多个 h 字符,并以字符 ern 结束的字符串的任何记录打印至标准输出。此示例中的输出是:
  89. smithern, harry
  90. smithhern, anne

  91.       ?指定如果零个或一个字符或扩展正则表达式的具体值(在 ?(问号)之前)在字符串中,则字符串匹配。命令行:
  92. awk '/smith?/' testfile
  93.       将包含字符 smit,后跟零个或一个 h 字符的实例的所有记录打印至标准输出。此示例中的输出是:
  94. smith, alan
  95. smithern, harry
  96. smithhern, anne
  97. smitters, alexis

  98.       |指定如果以 |(垂直线)隔开的字符串的任何一个在字符串中,则字符串匹配。命令行:
  99. awk '/allen
  100. |
  101. alan /' testfile
  102.       将包含字符串 allen 或 alan 的所有记录打印至标准输出。此示例中的输出是:
  103. smiley, allen
  104. smith, alan

  105.       ( )在正则表达式中将字符串组合在一起。命令行:
  106. awk '/a(ll)?(nn)?e/' testfile
  107.       将具有字符串 ae 或 alle 或 anne 或 allnne 的所有记录打印至标准输出。此示例中的输出是:
  108. smiley, allen
  109. smithhern, anne

  110.       {m}指定如果正好有 m 个模式的具体值位于字符串中,则字符串匹配。命令行:
  111. awk '/l{2}/' testfile
  112.       打印至标准输出
  113. smiley, allen

  114.       {m,}指定如果至少 m 个模式的具体值在字符串中,则字符串匹配。命令行:
  115. awk '/t{2,}/' testfile
  116.       打印至标准输出:
  117. smitters, alexis

  118.       {m, n}指定如果 m 和 n 之间(包含的 m 和 n)个模式的具体值在字符串中(其中m <= n),则字符串匹配。命令行:
  119. awk '/er{1, 2}/' testfile
  120.       打印至标准输出:
  121. smithern, harry
  122. smithern, anne
  123. smitters, alexis

  124.       [String]指定正则表达式与方括号内 String 变量指定的任何字符匹配。命令行:
  125. awk '/sm[a-h]/' testfile
  126.       将具有 sm 后跟以字母顺序从 a 到 h 排列的任何字符的所有记录打印至标准输出。此示例的输出是:
  127. smawley, andy

  128.       [^ String]在 [ ](方括号)和在指定字符串开头的 ^ (插入记号) 指明正则表达式与方括号内的任何字符不匹配。这样,命令行:
  129. awk '/sm[^a-h]/' testfile
  130.       打印至标准输出:
  131. smiley, allen
  132. smith, alan
  133. smithern, harry
  134. smithhern, anne
  135. smitters, alexis

  136.       ~,!~表示指定变量与正则表达式匹配(代字号)或不匹配(代字号、感叹号)的条件语句。命令行:
  137. awk '$1 ~ /n/' testfile
  138.       将第一个字段包含字符 n 的所有记录打印至标准输出:
  139. smithern, harry
  140. smithhern, anne

  141.       ^指定字段或记录的开头。命令行:
  142. awk '$2 ~ /^h/' testfile
  143.       将把字符 h 作为第二个字段的第一个字符的所有记录打印至标准输出。此示例中的输出是:
  144. smithern, harry

  145.       $指定字段或记录的末尾。命令行:
  146. awk '$2 ~ /y$/' testfile
  147.       将把字符 y 作为第二个字段的最后一个字符的所有记录打印至标准输出。此示例中的输出是:
  148. smawley, andy
  149. smithern, harry

  150.       .(句号)表示除了在空白末尾的终端换行字符以外的任何一个字符。命令行:
  151. awk '/a..e/' testfile
  152.       将具有以两个字符隔开的字符 a 和 e 的所有记录打印至标准输出。此示例中的输出是:
  153. smawley, andy
  154. smiley, allen
  155. smithhern, anne

  156.       *(星号)表示零个或更多的任意字符。命令行:
  157. awk '/a.*e/' testfile
  158.       将具有以零个或更多字符隔开的字符 a 和 e 打印至标准输出。此示例中的输出是:
  159. smawley, andy
  160. smiley, allen
  161. smithhern, anne
  162. smitters, alexis

  163.       \ (反斜杠)转义字符。当位于在扩展正则表达式中具有特殊含义的任何字符之前时,转义字符除去该字符的任何特殊含义。例如,命令行:
  164. /a\/\//
  165.       将与模式 a //
  166.       匹配,因为反斜杠否定斜杠作为正则表达式定界符的通常含义。要将反斜杠本身指定为字符,则使用双反斜杠。有关反斜杠及其使用的更多信息,请参阅以下关于转义序列的内容。

  167. 识别的转义序列
  168. awk 命令识别大多数用于 C 语言约定中的转义序列,以及 awk 命令本身用作特殊字符的几个转义序列。转义序列是:
  169.       转义序列表示的字符
  170.       \"\"(双引号)
  171.       \//(斜杠)字符
  172.       \ddd其编码由 1、2 或 3 位八进制整数表示的字符,其中 d 表示一个八进制数位
  173.       \\\ (反斜杠) 字符
  174.       \a警告字符
  175.       \b退格字符
  176.       \f换页字符
  177.       \n换行字符(请参阅以下的注)
  178.       \r回车字符
  179.       \t跳格字符
  180.       \v垂直跳格

  181.   注:除了在 gsub、match、split 和 sub
  182.   内置函数中,扩展正则表达式的匹配都基于输入记录。记录分隔符字符(缺省情况下为换行字符)不能嵌套在表达式中,且没与记录分隔符字符匹配的表达式。如果记录分隔符不是换行字符,则可与换行字符匹配。在指定的四个内置函数中,匹配基于文本字符串,且任何字符(包含记录分隔符)可以嵌套在模式中,这样模式与适当的字符相匹配。然而,用
  183.   awk 命令进行的所有正则表达式匹配中,在模式使用一个或多个 NULL(空)字符将生成未定以的结果。
  184. 关系表达式
  185. 关系运算符 <(小于)、>(大于)、<=(小于或等于)、>=(大于或等于)、= =(等于)和 !=(不等于)可用来形成模式。例如,模式:
  186. $1 < $4
  187. 将与第一个字段小于第四个字段的记录匹配。关系运算符还和字符串值一起使用。例如:
  188. $1 =! "q"
  189. 将与第一个字段不是 q 的所有记录匹配。字符串值还可以根据校对值匹配。例如:
  190. $1 >= "d"
  191. 将与第一个字段以字符 a、b、c 或 d 开头的所有记录匹配。如果未给出其它信息,则字段变量作为字符串值比较。
  192. 模式的组合
  193. 可以使用三种选项组合模式:
  194.   范围由两种以 ,(逗号)隔开的模式指定。操作在每个以匹配第一个模式的记录开始的每个记录上执行,并通过匹配第二个模式的记录(包含此记录)继续。例如:
  195. /begin/,/end/
  196.   与包含字符串 begin 的记录以及该记录和包含字符串 end 之间的所有记录(包含包括字符串 end 的记录)匹配。
  197.   括号 ( ) 将模式组合在一起。
  198.   布尔运算符 ||(或)&&(和)以及 !(不)将模式组合成如果它们求值为真则匹配,否则不匹配的表达式。例如,模式:
  199. $1 == "al" && $2 == "123"
  200.   与第一个字段是 al 且第二个字段是 123 的记录匹配。
  201. BEGIN 和 END 模式
  202. 用 BEGIN 模式指定的操作在读取任何输入之前执行。用 END 模式指定的操作在读取了所有输入后执行。允许多个 BEGIN 和 END
  203. 模式,并以指定的顺序处理它们。在程序语句中 END 模式可以在 BEGIN 模式之前。如果程序仅由 BEGIN 语句构成,则执行操作且不读取输入。如果程序仅由
  204. END 语句构成,则在任何操作执行前读取所有输入。
  205. 操作
  206. 有多种类型的操作语句:
  207.   操作语句
  208.   内置函数
  209.   用户定义的函数
  210.   条件语句
  211.   输出操作
  212. 操作语句
  213. 操作语句括在 { } (花括号) 中。如果语句指定为没有模式,则它们在每个记录上执行。在括号里可以指定多个操作,但操作间必须以换行字符或
  214. ;(分号),且语句以它们出现的顺序处理。操作语句包含:
  215.       算术语句
  216.       算术运算符 +(加号), - (减号), / (除号), ^ (幂), * (乘号), % (系数)用于格式:
  217. 表达式 运算符 表达式
  218.       这样语句为:
  219. $2 = $1 ^ 3
  220.       将第一个升为三次方的字段的值指定给第二个字段。
  221.       一元语句
  222.       一元 -(减号)和一元 +(加号)如在 C 编程语言中操作:
  223. +Expression 或 -Expression

  224.       增量和减量语句
  225.       增量前语句和减量前语句如在 C 编程语言中操作:
  226. ++Variable 或 --Variable
  227.       增量后语句和减量后语句如在 C 编程语言中操作:
  228. Variable++ 或 Variable--

  229.       赋值语句
  230.       赋值运算符 +=(加)、-=(减)、/=(除)和 *=(乘)如在 C 编程语言中操作,格式为:
  231. Variable += Expression
  232. Variable -= Expression
  233. Variable /= Expression
  234. Variable *= Expression
  235.       例如,语句:
  236. $1 *= $2
  237.       将字段变量 $1 乘以字段变量 $2,然后将新值指定给 $1。
  238.       赋值运算符 ^=(幂)和 %=(系数)具有以下格式:
  239. Variable1^=Expression1
  240.       和
  241. Variable2%=Expression2
  242.       并且它们等同于 C 编程语言语句:
  243. Variable1=pow(Variable1, Expression1)
  244.       和
  245. Variable2=fmod(Variable2, Expression2)
  246.       其中 pow 是 pow 子例程而 fmod 是 fmod 子例程。
  247.       字符串串联语句
  248.       字符串值可以通过紧挨着陈述来串联。例如:
  249. $3 = $1 $2
  250.       将字段变量 $1 和 $2 中的字符串的串联指定给字段变量 $3。

  251. 内置函数
  252. awk 命令语言使用算术函数、字符串函数和一般函数。如果打算编写一个文件,且稍后在同一个程序里读取它,则 close 子例程语句是必需的。
  253. 算术函数
  254. 以下算术函数执行与 C 语言中名称相同的子例程相同的操作:
  255.       atan2( y, x )返回 y/x 的反正切。
  256.       cos( x )返回 x 的余弦;x 是弧度。
  257.       sin( x )返回 x 的正弦;x 是弧度。
  258.       exp( x )返回 x 幂函数。
  259.       log( x )返回 x 的自然对数。
  260.       sqrt( x )返回 x 平方根。
  261.       int( x )返回 x 的截断至整数的值。
  262.       rand( )返回任意数字 n,其中 0 <= n < 1。
  263.       srand( [Expr] )将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。

  264. 字符串函数
  265. 字符串函数是:
  266.       gsub( Ere, Repl, [ In ] )除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行,。
  267.       sub( Ere, Repl, [ In ] )用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere
  268.       参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与
  269.       Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。
  270.       index( String1, String2 )在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从
  271.       1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。
  272.       length [(String)]返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0
  273.       记录变量)。
  274.       blength [(String)]返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String
  275.       参数,则返回整个记录的长度($0 记录变量)。
  276.       substr( String, M, [ N ] )返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M
  277.       参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N,则子串的长度将是 M 参数指定的位置到
  278.       String 参数的末尾 的长度。
  279.       match( String, Ere )在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从
  280.       1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH
  281.       特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。
  282.       split( String, A, [Ere] )将 String 参数指定的参数分割为数组元素 A[1], A[2], . . .,
  283.       A[n],并返回 n 变量的值。此分割可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符 FS 特殊变量)来进行(如果没有给出
  284.       Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。
  285.       tolower( String )返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的
  286.       LC_CTYPE 范畴定义。
  287.       toupper( String )返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的
  288.       LC_CTYPE 范畴定义。
  289.       sprintf(Format, Expr, Expr, . . . )根据 Format 参数指定的 printf 子例程格式字符串来格式化
  290.       Expr 参数指定的表达式并返回最后生成的字符串。

  291. 一般函数
  292. 一般函数是:
  293.       close( Expression )用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用
  294.       getline 参数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则
  295.       close 语句是必需的。
  296.       system(Command )执行 Command 参数指定的命令,并返回出口状态。等同于 system 子例程。
  297.       Expression | getline [ Variable ]从来自 Expression
  298.       参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开江
  299.       Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取
  300.       Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对
  301.       getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。
  302.       getline [ Variable ] < Expression从 Expression 参数指定的文件读取输入的下一个记录,并将
  303.       Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline
  304.       函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。
  305.       getline [ Variable ]将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable
  306.       参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。

  307.   注:所有 getline 函数的格式对于成功输入返回 1,对于文件结束返回零,对于错误返回 -1。
  308. 用户定义的函数
  309. 用户定义的函数以下列格式说明:
  310. function Name (Parameter, Parameter,...)  { Statements }
  311. 函数可以指向 awk 命令程序中的任何位置,且它的使用可以优先于它的定义。此函数的作用域是全局的。
  312. 函数参数可以是标量或数组。参数名称对函数而言是本地的;所有其它变量名称都是全局的。同一个名称不应用作不同的实体;例如,一个参数不能即用作函数名称又用作特殊变量。具有全局作用域的变量不应共享一个函数的名称。同个作用域中的标量和数组不应具有同一个名称。
  313. 函数定义中的参数数量不必和调用函数时使用的参数数量匹配。多余的形式参数可用作本地变量。额外的标量初始化后具有等同于空字符串和数字值为
  314. 0(零)的字符串值;额外的数组参数初始化为空数组。
  315. 当调用函数时,函数名称和左括号之间没有空格。函数调用可以是嵌套的或循环的。从任何嵌套的或循环函数函数调用返回时,所有调用函数的参数的值应保持不变,除了引用传送的数组参数。return
  316. 语句可用于返回一个值。
  317. 在函数定义内,在左 { (花括号) 之前和右 } (花括号) 之后的换行字符是可选的。
  318. 函数定义的一个示例是:
  319. function average ( g,n)
  320.   {
  321.         for (i in g)
  322.            sum=sum+g[i]
  323.         avg=sum/n
  324.         return avg
  325.   }
  326. 数组 g 和变量 n 以及数组中的元素个数传递给函数 average。然后函数获得一个平均值并返回它。
  327. 条件语句
  328. awk 命令编程语言中的大部分条件语句和 C 编程语言中的条件语句具有相同的语法和功能。所有条件语句允许使用{ } (花括号)
  329. 将语句组合在一起。可以在条件语句的表达式部分和语句部分之间使用可选的换行字符,且换行字符或 ;(分号)用于隔离 { } (花括号) 中的多个语句。C
  330. 语言中的六种条件语句是:
  331.       if需要以下语法:
  332.       if ( Expression ) { Statement } [ else Action ]
  333.       while需要以下语法:
  334.       while ( Expression ) { Statement }
  335.       for需要以下语法:
  336.       for ( Expression ; Expression ; Expression ) { Statement }
  337.       break当 break 语句用于 while 或 for 语句时,导致退出程序循环。
  338.       continue当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。

  339. awk 命令编程语言中的五种不遵循 C 语言规则的条件语句是:
  340.       for...in需要以下语法:
  341.       for ( Variable in Array ) { Statement }
  342.       for...in 语句将 Variable 参数设置为 Array 变量的每个索引值,一次一个索引且没有特定的顺序,并用每个迭代来执行
  343.       Statement 参数指定的操作。请参阅 delete 语句以获得 for...in 语句的示例。
  344.       if...in需要以下语法:
  345.       if ( Variable in Array ) { Statement }
  346.       if...in 语句搜索是否存在的 Array 元素。如果找到 Array 元素,就执行该语句。
  347.       delete需要以下语法:
  348.       delete Array [ Expression ]
  349.       delete 语句删除 Array 参数指定的数组元素和 Expression 参数指定的索引。例如,语句:
  350. for (i in g)
  351.    delete g[i];
  352.       将删除 g[] 数组的每个元素。
  353.       exit需要以下语法:
  354.       exit [Expression]
  355.       exit 语句首先调用所有 END 操作(以它们发生的顺序),然后以 Expression 参数指定的出口状态终止 awk 命令。如果 exit
  356.       语句在 END 操作中出现,则不调用后续 END 操作。
  357.       #需要以下语法:
  358.       # Comment
  359.       # 语句放置注释。注释应始终以换行字符结束,但可以在一行上的任何地方开始。
  360.       next停止对当前输入记录的处理,从下一个输入记录继续。

  361. 输出语句
  362. awk 命令编程语言的两种输出语句是:
  363.       print需要以下语法:
  364.       print [ ExpressionList ] [ Redirection ] [ Expression ]
  365.       print 语句将 ExpressionList 参数指定的每个表达式的值写至标准输出。每个表达式由 OFS 特殊变量的当前值隔开,且每个记录由
  366.       ORS 特殊变量的当前值终止。
  367.       可以使用 Redirection 参数重定向输出,此参数可指定用 >(大于号)、>>(双大于号)和
  368.       |(管道)进行的三种输出重定向。Redirection 参数如果重定向输出,而 Expression 参数是文件的路径名称(当
  369.       Redirection 参数是 > 或 >> 时)或命令的名称(当 Redirection 参数是 | 时)。
  370.       printf需要以下语法:
  371.       printf Format [ , ExpressionList ] [ Redirection ] [ Expression ]
  372.       printf 语句将 ExpressionList 参数指定的表达式以 Format 参数指定的格式写至标准输出。除了 c
  373.       转换规范(%c)不同外,printf 语句和 printf 命令起完全相同的作用。Redirection 和 Expression 参数与在
  374.       print 语句中起相同的作用。
  375.       对于 c
  376.       转换规范:如果自变量具有一个数字值,则编码是该值的字符将输出。如果值是零或不是字符集中的任何字符的编码,则行为未定义。如果自变量不具有数字值,则输出字符串值的第一个字符;如果字符串不包含任何字符,则行为未定义。

  377.   注:如果 Expression 参数为 Redirection 参数指定一个路径名称,则 Expression 参数将括在双引号中以确保将它当作字符串对待。
  378. 变量
  379. 变量可以是标量、字段变量、数组或特殊变量。变量名称不能以数字开始。
  380. 变量可仅用于引用。除了函数参数以外,它们没有明确说明。未初始化的标量变量和数组元素具有一个为 0(零)的数字值和一个为空字符串(" ")的字符串值。
  381. 根据上下文,变量呈现出数字或字符串值。每个变量可以具有数字值和/或字符串值。例如:
  382. x = "4" + "8"
  383. 将值 12 指定给变量 x。对于字符串常量,表达式应括在 " "(双引号)中。
  384. 数字和字符串间没有显式转换。要促使将表达式当作一个数字,向它添加 0(零)。要促使将表达式当作一个字符串,则添加一个空字符串(" ")。
  385. 字段变量
  386. 字段变量由 $(美元符号)后跟一个数字或数字表达式来表示。记录中的第一个字段指定为 $1 变量,第二个字段指定为 $2,以次类推。$0
  387. 字段变量指定给整个记录。新字段可以通过指定一个值给它们来创建。将一个值指定给不存在的字段(即任何大于 $NF
  388. 字段变量的当前值的字段)将促使创建任何干扰字段(指定为空字符串),增加 NF 特殊变量的值,并促使重新计算 $0 记录变量。新字段由当前字段分隔符(FS
  389. 特殊变量的值)隔开。空格和跳格是缺省字段分隔符。要更改字段分隔符,请使用 -F 标志或 在 awk 命令程序中为 FS 特殊变量指定另一个值。
  390. 数组
  391. 数组初始为空且它们大小可动态更改。数组由一个变量和在 [ ](方括号)中的下标来表示。下标或元素标识符可以是几个字符串,它们提供了一种相关数组能力。例如,程序:
  392. /red/  { x["red"]++ }
  393. /green/ { y["green"]++ }
  394. 增加 red 计数器和 green 计数器的计数。
  395. 数组可以用一个以上的下标来建立索引,类似于一些编程语言中的多维数组。因为 awk 命令的编程数组实际上一维的,通过串联各独立表达式的字符串值(每个表达式由
  396. SUBSEP 环境变量的值隔开)来将以逗号隔开的下标转换为单个字符串。所以,以下两个索引操作是等同的:
  397. x[expr1, expr2,...exprn]

  398. x[expr1SUBSEPexpr2SUBSEP...SUBSEPexprn]
  399. 当使用 in 运算符时,一个多维 Index 值应包含在圆括号之中。除了 in 运算符,任何对不存在数组元素的引用将自动创建该元素。
  400. 特殊变量
  401. 以下变量对于 awk 命令具有特殊含义:
  402.       ARGCARGV 数组中的元素个数。此值可以更改。
  403.       ARGV其每个成员包含 File 变量之一或 Assignment 变量之一的数组按序从命令行取出,并从 0(零)编号至 ARGC
  404.       -1。当每个输入文件完成时,ARGV 数组的下一个成员提供下一个输入文件的名称,除非:
  405.         下一个成员是 Assignment 语句,这种情况下对赋值求值。
  406.         下一个成员具有空值,这种情况下跳过该成员。程序可以通过设置 ARGV 数组的包含该输入文件的成员设置为一个空值来跳过所选的输入文件。
  407.         下一个成员是 ARGV [ARGC -1] 的当前值,awk 命令将此成员解释为输入文件的末尾。

  408.       CONVFMT将数字转换为字符串的 printf 格式(除了使用 OFMT 特殊变量的输出语句)。缺省值为“%.6g”。
  409.       ENVIRON表示运行 awk 命令的环境的数组。该数组的每个元素在以下格式中:
  410.       ENVIRON [ "Environment VariableName" ] = EnvironmentVariableValue
  411.       当 awk 命令开始执行时设置这些值,且到执行结束前一直使用该变量,不考虑 ENVIRON 特殊变量的任何修改。
  412.       FILENAME当前输入文件的路径名称。在执行 BEGIN 操作的过程中,FILENAME 的值未定义。在执行 END
  413.       操作的过程中,该值是处理的最后一个输入文件的名称。
  414.       FNR当前文件中的当前输入记录的个数。
  415.       FS输入字段分隔符。缺省值是空格。如果输入字段分隔符是空格,则任何数目的语言环境定义的空格可以分隔字段。FS 特殊变量可以有两种附加的值:
  416.         如果 FS 设置为单个字符,则字段由该字符的每个单个具体值隔开。
  417.         如果 FS 位置为一个扩展正则表达式,则字段由与扩展正则表达式匹配的每个序列的具体值隔开。

  418.       NF当前记录中的字段个数,最大数 99 个。在 BEGIN 操作中,除非先前发出不带 Variable 参数的 getline 函数,否则 NF
  419.       特殊变量未定义。在 END 操作中,除非在输入 END 操作之前发出不带 Variable 参数的后续的、重定向的 getline 函数,否则 NF
  420.       特殊变量保留它为读取的最后一个记录而具有的值。
  421.       NR当前输入记录的个数。在 BEGIN 操作中,NR 特殊变量的值是 0(零)。在 END 操作中,值是最后处理的记录的编号。
  422.       OFMT在输出语句中将数字转换为字符串的 printf 格式。缺省值为“%.6g”。
  423.       OFS输出字段分隔符(缺省值是空格)。
  424.       ORS输出记录分隔符(缺省值是换行字符)。
  425.       RLENGTH由 match 函数来匹配的字符串的长度。
  426.       RS输入记录分隔符(缺省值是换行字符)。如果 RS
  427.       特殊变量为空,则记录以一个或多个空行的序列隔开;第一个空行或最后一个空行在输入的开始和结束都不会产生空记录;换行字符始终是一个字段分隔符,不考虑
  428.       FS 特殊变量的值。
  429.       RSTART由 match 函数来匹配的字符串的起始位置,从 1 开始编号。等同于 match 函数的返回值。
  430.       SUBSEP隔开多个下标。缺省值是 \031。

  431. 标志
  432.       -f ProgramFile从 ProgramFile 变量指定的文件获取 awk 命令的指令。如果多次指定 -f
  433.       标志,则文件的串联(按指定的顺序)将用作指令集。
  434.       -F Ere请使用 Ere 变量指定的扩展正则表达式作为字段分隔符。缺省字段分隔符是空格。
  435.       -v Assignment将值指定给 awk 命令编程语言的变量。Assignment 参数的格式是 Name = Value。Name
  436.       部分指定变量的名称并可以是任何下划线、数字或字母字符的组合,但它必须以字母字符或下划线开头。Value
  437.       部分也由下划线、数字和字母数字组成,且前面和后面都有一个 "(双引号字符,类似于字符串值)。如果 Value 部分是数字,则也将为变量指定数字值。
  438.       -v 标志指定的赋值在执行 awk 命令程序的任何部分之前发生,包含 BEGIN 节。
  439.       Assignment将值指定给 awk 命令编程语言的变量。该值和带有 -v 标志的 Assignment
  440.       变量具有相同的格式和功能(除了两者处理的时间不同以外)。Assignment 参数在处于命令行时跟在其后的输入文件(由 File
  441.       变量指定)之前处理。如果指定 Assignment 参数仅优先于多个输入文件的第一个,则赋值在 BEGIN 节后(如果有)就处理。如果
  442.       Assignment 参数出现在最后一个文件后,则在 END 节(如果有)之前处理赋值。如果不指定输入文件,则当读取了标准输入时处理赋值。
  443.       File指定包含要处理的输入的文件的名称。如果不指定 File 变量,或指定了 -(减号),则处理标准输入。
  444.       'Program'包含 awk 命令的指令。如果不指定 -f 标志,Program 变量应该是命令行上的第一个项。它应括在 ' '(单引号)中。

  445. 出口状态
  446. 该命令返回以下出口值:
  447.       0成功完成。
  448.       >0发生错误。

  449. 可以通过使用 exit [ Expression ] 条件语句来更改程序中的出口状态。
  450. 示例
  451.   要显示长于 72 个字符的文件的行,请输入:
  452. awk  'length  >72'  chapter1
  453.   这选择 chapter1 文件中长于 72 个字符的每一行,并将这些行写至标准输出,因为未指定 Action。制表符以 1 个字符计数。
  454.   要显示字 start 和 stop 之间的所有行,包含“start”和“stop”,请输入:
  455. awk  '/start/,/stop/'  chapter1
  456.   要运行一个处理文件 chapter1 的 awk 命令程序 sum2.awk,请输入:
  457. awk  -f  sum2.awk  chapter1
  458.   以下程序,sum2.awk,计算了输入文件 chapter1 中的第二列的数字的总和与平均值:
  459.     {
  460.        sum += $2
  461.     }
  462. END {
  463.        print "Sum: ", sum;
  464.        print "Average:", sum/NR;
  465.     }
  466.   第一个操作将每行的第二个字段的值添加至变量 sum。当第一次被引用时,所有的变量都初始化为数字值 0(零)。第二个操作前的模式 END
  467.   使那些操作在读取了所有输入文件之后才执行。用于计算平均值的 NR 特殊变量是一个指定已经读取的记录的个数的特殊变量。
  468.   要以相反顺序打印前两个字段,请输入:
  469. awk '{ print $2, $1 }' chapter1
  470.   以下 awk 的程序 sum3.awk 打印文件 chapter2
  471.   的前两个字段(输入字段由逗号和/或空格和跳格隔开),然后合计第一列的数字,并打印出总和与平均值:
  472. BEGIN  {FS = ",|[ \t]+"}
  473.        {print $1, $2}
  474.        {s += $1}
  475. END    {print "sum is",s,"average is", s/NR }      
复制代码

论坛徽章:
0
2 [报告]
发表于 2004-03-19 17:01 |只看该作者

AWK、SED、GREP、VI在AIX5.2下的MAN文档


  1. sed 命令
  2. 用途
  3. 提供流编辑器。
  4. 语法
  5. sed [  -n ] Script [ File ... ]
  6. sed [  -n ] [  -e Script ] ... [  -f ScriptFile ] ... [ File ... ]
  7. 描述
  8. sed 命令根据编辑脚本从指定的 File 参数修改行,并将结果写入标准输出。 sed 命令包含很多功能,用于选择要修改的行,并只对选择的行作更改。
  9. sed 命令使用两个工作空间来保留修改的行:保留选择行的模式空间和暂时存储行的保留空间。
  10. 编辑脚本由单独的子命令构成,每个子命令在分离的行上。 sed 子命令的一般格式如下:
  11. [address-range] function[modifiers]
  12. sed 命令通过将输入行读入方式空间,依次应用所有的 sed 子命令(这些子命令的地址选择了那个行),并将方式空间写到标准输出来处理每个输入 File
  13. 参数。然后清除方式空间,并对每个在输入 File 参数中指定的行重复这个过程。一些 sed 子命令使用保留空间来保存所有或部分后继检索的模式空间。
  14. 当命令包含地址(行号或搜索模式)时,该命令只会对被寻址的行起作用。否则,该命令适用于所有的行。
  15. 地址是十进制行号、$(美元符号),它指出输入的最后行的地址或上下文地址。上下文地址是正则表达式,它与那些在 ed 命令中使用的表达式相似,不过存在下列的差别:
  16.   您可以从模式中选择字符定界符。表达式的常规格式是:
  17. \?pattern?
  18.   其中 ? (问号)是可选择的字符定界符。除了空格或换行符,您可以从当前的语言环境中选择任何字符。只有在第一次出现 ?(问号)时才需要 \ (反斜杠) 字符。
  19.   模式的缺省格式如下:
  20. /pattern/
  21.   \ (反斜杠) 字符不是必需的。
  22.   \n 序列与模式空间中的换行符匹配,除了终止的换行符。
  23.   。(句号)与除终止的换行符之外的任何字符匹配。也就是说,与 ed 命令不同(ed 命令不能匹配行中间的字符),sed 命令能够匹配模式空间中的换行符。
  24. 某些叫做 addressed 的命令允许您指定该命令适用的一行或多行。下列的规则适用于寻址命令:
  25.   没有地址的命令行选择每一行。
  26.   具有以上下文格式表示的地址的命令行会选择与该地址匹配的每一行。
  27.   具有以逗号分割的两个地址的命令行选择从与第一个地址匹配的第一行到与第二个地址匹配的下一行的整个范围。(如果第二个地址小于或等于第一个选择的行号,那么只会选择一行。)此后就会重复这个过程以再次寻找第一个地址。
  28. 标志
  29.       -e Script使用 Script 变量作为编辑脚本。如果您只使用 -e 标志,而不使用-f 标志,那么就可以省略 -e 标志。
  30.       -f ScriptFile使用 ScriptFile 变量作为编辑脚本源。 ScriptFile 变量是适用于 File
  31. 参数的一组准备好的编辑命令。
  32.       -n抑制所有正常写入标准输出的信息。

  33.   注: 您可以指定多个 -e 和 -f 标志。将所有的子命令以指定的顺序添加到脚本,而不管其来源。
  34. sed 子命令
  35. sed 命令包含下列的 sed 脚本子命令。子命令前的圆括号内的数字表示子命令可允许地址的最大数。
  36.   注:
  37.     伴随 a\ , c\ 以及 i\ 子命令的 Text 变量能够在不止一行上继续,提供了所有行(但是最后以引用换行符的 \ (反斜杠)
  38.     结束)。文本中的反斜杠视为与 s 命令中的替换字符串相似,并且能够用于保护初始的空格和制表符,使其免受在处理每个脚本行时被删除。 RFile 和
  39.     WFile 变量必须结束命令行,并且必须在前面有一个空格。在开始处理前创建每个 WFile 变量。
  40.     sed 命令能够处理模式文件中多达 999 个子命令。
  41.       (1) a\
  42.       Text在读取下一个输入行之前在输出中放置 Text 变量。
  43.       (2)b[label]分支具有 label 变量的 : 命令。如果 label 变量是空的,那就分支到脚本的末尾。
  44.       (2)c\
  45.       Text删除模式空间。用 0 或 1 地址或 2 地址范围的末尾,将 Text 变量放置在输出中,然后开始下一个周期。
  46.       (2)d删除模式空间,然后开始下一个周期。
  47.       (2)D删除通过第一个换行符的模式空间的初始段,然后开始下一个周期。
  48.       (2)g用保留空间的内容替换模式空间的内容。
  49.       (2)G将保留空间的内容附加到模式空间。
  50.       (2)h用模式空间的内容替换保留空间的内容。
  51.       (2)H将模式空间的内容附加到保留空间。
  52.       (1)i\
  53.       Text在将下一行读到模式空间之前将 Text 变量写到标准输出。
  54.       (2)l将模式空间写到标准输出中,它将不可显示字符显示为 4 位十六进制值。将长行折叠起来。
  55.       (2)l以视觉明确的格式将模式空间写到标准输出中。将字符 \\\, \\a, \\b, \\f, \\r, \\t 以及 \\v
  56.       以相应的转义序列写入。以每个字节(最重要的字节首先表示)用一个三位八进制数字(前面有反斜杠字符)表示的方式写入不可打印的字符。该格式也用于多字节字符。该子命令折叠长行。其后有换行符的反斜杠表示折叠点。折叠出现在第
  57.       72 列位置。 $(美元符号)标记每行的结束。
  58.       (2)n如果不抑制缺省的输出,那就将模式空间写到标准输出。它用输入的下一行替换模式空间。
  59.       (2)N将输入的下一行附加到具有嵌入式换行符(更改当前的行号)的模式空间。您可以用它来搜索分割成两行的模式。
  60.       (2)p将模式空间写到标准输出。
  61.       (2)P将通过第一个换行符的模式空间的初始段写到标准输出。
  62.       (1)q分支到脚本的结束。它不启动新的周期。
  63.       (2)r RFile读取 RFile 变量的内容。在读取下一输入行之前将内容放置到输出。
  64.       (2)s/pattern/replacement/flags
  65.                                用 replacement 字符串代替在模式空间中首次出现的 pattern
  66.       参数。除了空格或换行符,在 s 子命令之后显示的任何字符都能代替 /(斜杠)分隔符。
  67.       请参阅 ed 命令的 『模式匹配』 部分。
  68.       flags 变量的值必须是零或以下的值:
  69.         g
  70.                                  
  71.         代替 pattern 参数所有非重叠的实例,而不只是第一个。
  72.         n
  73.         仅代替第 n 次出现的 pattern 参数。
  74.         p
  75.         如果作了替代,那就将模式空间写到标准输出。
  76.         w WFile
  77.         如果作了替代,将模式空间写到 WFile 变量。将模式空间附加到WFile 变量。如果 sed 脚本的先前写入没有创建 WFile 变量,那么
  78.         sed 命令就会创建它。
  79.       (2)tlabel如果最近读取 t 子命令的输入行时做了任何替代的话,则分支在脚本文件中的 :label 变量。如果您不指定 label
  80.       变量,那么就将控制传向脚本的末尾。
  81.       (2)wWFile将模式空间附加到 WFile 变量。
  82.       (2)x交换模式空间和保留空间的内容。
  83.       (2)y/pattern1/pattern2/
  84.                                将所有 pattern1 变量中出现的字符代替为相应的 pattern2 字符。在
  85.       pattern1 和 pattern2 变量中的字符数必须相等。换行符用 \n 表示。
  86.       (2)!sed-cmd只将指定的 sed 子命令应用于没有选择地址的行。
  87.       (0):label标记 b 和 t 子命令引用的分支点。该标号可以是任何八个或更少字节的序列。
  88.       (1)=将当前行号作为一行写到标准输出。
  89.       (2){subcmd
  90.       .
  91.       .
  92.       .
  93.       }组子命令以 {} (花括号) 封装。
  94.       (0)忽略空命令。
  95.       (0)#如果 #(镑符)是出现在脚本文件的某行的第一个字符,那么就会将整个行视为注释,但有一个例外。只对脚本文件的第一行来说,如果在 # 后的字符是
  96.       n,就会抑制缺省的输出。忽略 #n 之后的行的剩余部分。

  97. 出口状态
  98. 该命令返回以下出口值:
  99.       0成功完成。
  100.       >0发生错误。

  101. 示例
  102.   要执行全局更改,输入:
  103. sed  "s/happy/enchanted/g" chap1  >chap1.new
  104.   该命令序列用单词 enchanted 代替每个在文件 chap1 中出现的单词 happy。它将已编辑的版本写入名为 chap1.new 的分离文件。s
  105.   子命令末尾的 g 字符告诉 sed 命令在每行作尽可能多的替代。如果没有 g 字符,那么 sed 命令就只会代替行中首次出现的单词 happy。
  106.   sed 命令作为过滤器操作。它从标准输入或在命令行命名的文件中(本例中是
  107.   chap1)读取文本、修改文本、并将其写入标准输出。不同于大多数的编辑器,它不替换原始文件。在流水线使用时,这会使 sed 命令成为强大的命令。
  108.   要在流水线中将 sed 命令用作过滤器,输入:
  109. pr  chap2 | sed "s/Page *[0-9]*$/(&)/" | enq
  110.   该命令序列在打印文件 chap2 之前将页码封装在括号中。pr 命令将标题和页码放置在每页的顶部,然后 sed 命令将页码放在括号中,enq
  111.   命令打印已编辑的列表。
  112.   sed 命令模式 /Page *[0-9]*$/ 与出现在行末的页码匹配。 s 子命令将其更改为 (&),其中 & 代表匹配的页码。
  113.   要显示文件的选择的行,输入:
  114. sed  -n  "/food/p" chap3
  115.   sed -n 显示文件 chap3 中包含单词 food 的每一行。通常,sed 命令将编辑过的每行复制到标准输出。 -n 使 sed
  116.   命令停止这样做。然后,您使用子命令(如 p )写入文本的特定部分。如果没有 -n 标志,该示例会显示文件 chap3 中的所有行,并显示包含 food
  117.   的每个行两次。
  118.   要执行复杂的编辑,输入:
  119. sed  -f  script.sed  chap4  >chap4.new
  120.   当您想做复杂的事情时,该命令序列创建 sed
  121.   脚本文件。然后您在使用脚本之前就可以对其进行测试和修改。您也可以重用脚本来编辑其它文件。用交互式文本编辑器创建脚本文件。
  122.   样本 sed 脚本文件:
  123. :join
  124. /\\$/{N
  125. s/\\\n//
  126. b join
  127. }
  128.   sed 脚本将每个以 \ (反斜杠) 结束的行连接到其后的一行。首先,模式 /\\$/ 选择以 \ 结束的行,其用于以 {} (花括号) 封装的命令组。然后
  129.   N 子命令附加下一行,嵌入换行符。 s/\\\n// 删除 \ 和嵌入的换行符。最后,b join 分支回到标号 :join 以在新连接的行末检查 \  
  130.   。如果没有分支,那么 sed 命令在检查第二个  \ 之前写入连接的行并读取下一行。
  131.     注:N 子命令引起 sed 命令立刻停止,如果没有更多的输入行的话(也就是说,如果 N
  132.     子命令读取文件结束符的话)。在停止前它不将模式空间复制到标准输出。这意味着如果输入的最后行结束于 \ , 就不将其复制到输出。
  133.   要将现有的文件(oldfile)复制到新的文件(newfile),并将所有出现的 testpattern 文本字符串替换为 $REPL
  134.   外壳程序变量的内容,输入:
  135. cat oldfile | sed -e "s/testpattern/$REPL/g" > newfile
复制代码

论坛徽章:
0
3 [报告]
发表于 2004-03-19 17:02 |只看该作者

AWK、SED、GREP、VI在AIX5.2下的MAN文档


  1. grep 命令
  2. 用途
  3. 搜索文件中的模式。
  4. 语法
  5. grep [ -E | -F ] [ -i ] [ -h ] [ -s ] [ -v ] [ -w ] [ -x ] [ -y ] [ [ [ -b ] [
  6. -n ] ] | [ -c | -l | -q ] ] [ -p [ 分隔符 ] ] { [ -e PatternList ... ] [ -f
  7. PatternFile ... ] | PatternList ... } [ 文件... ]
  8. 说明
  9. grep 命令用于搜索由 Pattern 参数指定的模式,并将每个匹配的行写入标准输出中。这些模式是具有限定的正则表达式,它们使用 ed 或 egrep
  10. 命令样式。 grep 命令使用压缩的不确定算法。
  11. 如果在 File 参数中指定了多个名称,grep 命令将显示包含匹配行的文件的名称。对 shell 有特殊含义的字符 ($, *, [, |, ^, (, ),
  12. \ ) 出现在 Pattern 参数中时必须带双引号。如果 Pattern 参数不是简单字符串,通常必须用单引号将整个模式括起来。在诸如 [a-z],
  13. 之类的表达式中,-(减号)cml 可根据当前正在整理的序列来指定一个范围。整理序列可以定义等价的类以供在字符范围中使用。如果未指定任何文件,grep
  14. 会假定为标准输入。
  15.   注意:
  16.     行被限制为 2048 个字节。
  17.     段落(使用 -p 标志时)长度当前被限制为 5000 个字符。
  18.     请不要对特殊文件运行 grep 命令,这样做可能产生不可预计的结果。
  19.     输入行不应包含空字符。
  20.     输入文件应该以换行符作为结束。
  21.     正则表达式不会对换行符进行匹配。
  22.     虽然一些标志可以同时被指定,但其中的某些标志会覆盖其它标志。例如,-l 选项将优先于所有其它标志。 另外,如果您同时指定了 -E 和 -F
  23.     标志,则后者会有优先权。
  24. 标记
  25.       -b在每行之前添加找到该行时所在的块编号。使用这个标志有助于通过上下文来找到磁盘块号码。-b 标志不能用于来自标准输入和管道的输入。
  26.       -c仅显示匹配行的计数。
  27.       -E将每个指定模式视作扩展的正则表达式(ERE)。ERE 的空值将匹配所有的行。
  28.         注:带有 -E 标志的 grep 命令等价于 egrep 命令,只不过它们的错误和使用信息不同以及 -s 标志的作用不同。
  29.       -e PatternList指定一个或多个搜索模式。其作用相当于一个简单模式,但在模式以
  30.       -(减号)开始的情况下,这将非常有用。模式之间应该用换行符分隔。连续使用两个换行符或者在引号后加上换行符 ("\n) 可以指定空模式。
  31.       除非同时指定了 -E 或 -F 标志,否则每个模式都将被视作基本正则表达式(BRE)。grep 可接受多个 -e 和 -f 标志。
  32.       在匹配行时,所有指定的模式都将被使用,但评估的顺序没有指定。
  33.       -F将每个指定的模式视作字符串而不是正则表达式。空字符串可匹配所有的行。
  34.         注: 带有 -F 标志的 grep 命令等价于 fgrep 命令,只不过它们的错误和使用信息不同以及 -s 标志具有不同的作用。
  35.       -f
  36.       PatternFile指定包含搜索模式的文件。模式之间应该用换行符加以分隔,空行将被认为是空模式。每种模式都将被视作基本的正则表达式(BRE),除非同时指定了
  37.       -E 或 -F 标志。
  38.       -h禁止在匹配行后附加包含此行的文件的名称。当指定多个文件时,将禁止文件名。
  39.       -i在进行比较时忽略字母的大小写。

  40.       -l仅列出(一次)包含匹配行的文件的名称。文件名之间用换行符加以分隔。如果搜索到标准输入,将返回(标准输入)的路径名。-l 标志同 -c 和 -n
  41.       标志的任意组合一起使用时,其作用类似于仅使用了 -l 标志。
  42.       -n在每一行之前放置文件中相关的行号。每个文件的起始行号为 1,在处理每个文件时,行计数器都将被复位。
  43.       -p[分隔符]显示包含匹配行的整个段落。段落之间将按照分隔符参数指定的段落分隔符加以分隔,这些分隔符是与搜索模式有着相同格式的模式。包含段落分隔符的行将仅用作分隔符,它们不会被包含在输出中。缺省的段落分隔符是空白行。
  44.       -q禁止所有写入到标准输出的操作,不管是否为匹配行。如果选择了输入行,则以零状态退出。-q 标志同 -c 和 -l、-n
  45.       标志的任意组合一起使用时,其作用类似于仅使用了 -q 标志。
  46.       -s禁止通常因为文件不存在或不可读取而写入的错误信息。其它的错误信息并未被禁止。
  47.       -v 显示所有与指定模式不匹配的行。
  48.       -w执行单词搜索。
  49.       -x显示与指定模式精确匹配而不含其它字符的行。
  50.       -y当进行比较时忽略字符的大小写。
  51.       PatternList指定将在搜索中使用的一个或多个模式。这些模式将被视作如同是使用 -e 标志指定的。
  52.       File指定将对其进行模式搜索的文件的名称。如果未给出 File 变量,将使用标准输入。

  53. 退出状态
  54. 此命令返回下列退出值:
  55.       0找到匹配项。
  56.       1未找到匹配项。
  57.       >1发现语法错误,或者文件不可访问(即使找到了匹配项)。

  58. 示例
  59.   若使用包含以下模式匹配字符的模式:*, ^, ?, [, ], \(, \), \{ 和 \} ,请输入:
  60. grep  "^[a-zA-Z]"  pgm.s
  61.   这将显示 pgm.s 中第一个字符为字母的所有行。
  62.   若显示所有与模式不匹配的行,请输入:
  63.   grep -v "^#" pgm.s
  64.   这将显示 pgm.s 中首字母不是 #(井字符)的所有行。
  65.   若显示文件 file1 中与abc 或 xyz 字符串匹配的所有行,请输入:
  66.   grep -E "abc|xyz" file1

  67.   若在名为 test2 的文件中搜索 $(美元符号),请输入:
  68. grep \\$ test2
  69.   为了强制 shell 将 \$(单反斜杠和美元符号)传递给 grep 命令,必须要使用 \\(双反斜杠)。\(单反斜杠)字符可通知 grep
  70.   命令将其后的字符(本例中为 $)视作原义字符而不是表达式字符。如果使用 fgrep 命令,则可以不必使用反斜杠之类的转义字符。
  71. 文件
  72.       /usr/bin/grep包含 grep 命令。
复制代码


  1. vi 或 vedit 命令
  2. 用途
  3. 用全屏显示编辑文件。
  4. 语法
  5. { vi | vedit } [ -l ] [ -R ] [ -tTag ] [ -v ] [ -wNumber] [ -yNumber ] [ -r [
  6. File ] ] [{ + | -c } { Subcommand } ] [ File ... ]
  7. 描述
  8. vi 命令基于基础 ex 编辑器启动全屏编辑器。因此,ex 子命令可以在 vi 编辑器中使用。vedit 命令启动适用于初学者的 vi 编辑器版本。在
  9. vedit 编辑器中,报告选项设置为 1,设置了 showmode 选项和 novice 选项,使其成为一个行编辑器。
  10. 通过指定被编辑文件名,可以启动 vi 编辑器。如果在命令行上提供多个 File 参数,vi 编辑器按指定的顺序编辑每一个文件。现有文件的 vi
  11. 编辑器在屏幕底部显示文件名、行数和字符数。在多字节语言环境的情况下,字符数必须解释成字节数。
  12. 由于 vi 编辑器是全屏编辑器,所以可以逐屏编辑文本。vi
  13. 编辑器在编辑缓冲区为编辑的文件制作副本,并且直到保存更改文件内容才会更改。光标在显示屏幕上的位置表明它在文件中的位置,并且子命令在光标位置影响该文件。
  14. vi 编辑器的局限性
  15. 以下列表提供了 vi 编辑器的最大限度。这些计数采用单字节字符集。
  16.   每行 {LINE_MAX} 个字符
  17.   每全局命令列表 256 个字符
  18.   128 个字符在以前被插入和删除的文本中
  19.   128 个字符在外壳程序转义命令中
  20.   128 个字符在一个字符串值的选项中
  21.   30 个字符在一个标记名中
  22.   128 个映射宏,总共 2048 个字符
  23.   1,048,560 行,每行强制不能超过 {LINE_MAX} 个字符
  24.   宏名和宏文本被限制在 100 个字符内。
  25. 注:
  26. 对大于 64MB 的文件运行 vi 编辑器可能会显示以下的错误信息:
  27. 0602-103 file too large to place in /tmp
  28. vi 编辑方式
  29. vi 编辑器按以下方式操作:
  30.       命令方式当启动 vi 编辑器时,它处于命令方式。您可以输入任何子命令,除了那些指定仅用于文本输入方式的子命令。当子命令和其它方式结束时,vi
  31.       编辑器返回命令方式。按 Esc 键取消子命令。
  32.       文本输入方式按这种方式使用 vi 编辑器来添加文本。用以下任意子命令进入文本输入方式: a 子命令、A 子命令、i 子命令、I 子命令、o子命令、O
  33.       子命令、cx 子命令(其中 x 代表子命令的范围)、C 子命令、s 子命令、S 子命令和 R
  34.       子命令。输入这些子命令中的一个后,即可输入文本到编辑缓冲区中。要返回到命令方式,按 ESC 键以正常退出或按“中断”(Ctrl-C
  35.       按键顺序)以非正常方式结束。
  36.       最后行方式带前缀 :(冒号)、/(斜杠)、?(问号)、!(感叹号)或 !!(两个感叹号)的子命令在屏幕底部的显示行上读取输入。当输入初始字符时,vi
  37.       编辑器将光标置于屏幕底部,在该处可以输入命令中剩余的字符。按 Enter 键运行子命令,或按“中断”(Ctrl-C 按键顺序)取消它。当 使用 !!
  38.       前缀时,光标只在两个感叹号都输入后才移动。当使用 : 前缀进入最后行方式时,如果在指定计数的命令之前使用以下字符,vi 编辑器赋予它们特定含义:
  39.         %
  40.         所有行,而不管光标的位置
  41.         $
  42.         最后行
  43.         .
  44.         当前行

  45. 定制 vi 编辑器
  46. 可以根据以下方式定制 vi 编辑器:
  47.   设置编辑选项
  48.   定义宏
  49.   映射键
  50.   设置缩写
  51. 设置 vi 编辑器选项
  52. 以下列表描述可以使用 set 命令更改的 vi 编辑器选项。这些选项的缺省设置是 off。如果打开了这些开关选项中的一个,在选项之前输入 no
  53. 即可重新关闭它。如果想中断 autowrite vi 选项,则输入 noaw,其中 no 关闭选项,aw 指定 autowrite 选项。
  54. 注:
  55. 当输入 vi 选项时不要包含圆括号。
  56.       vi 选项(缩写)描述
  57.       autoindent(ai)通过使用 shiftwidth 选项指定的制表符停止位之间的间隔,在文本输入方式中自动缩排为前行的缩排格式。缺省是
  58.       noai。将光标退回到前面的制表符停止位,按 Ctrl-D 快捷键。这个选项对于全局命令不起作用。
  59.       autoprin(ap)在任何更改编辑缓冲区的命令后面打印当前行。缺省是
  60.       ap。这个选项只应用于单行上一系列命令中的最后一个命令,并且对全局命令不起作用。
  61.       autowrite(aw)如果编辑缓冲区自上次 write 子命令以来发生更改,则在 :n 子命令、:ta 子命令、Ctrl-A 按键顺序和 !
  62.       子命令之前,将编辑缓冲区自动写入到文件。缺省是 noaw。
  63.       beautifying text(bf)在文本输入(除了制表符、换行符和换页指示符)的过程中,防止用户在编辑缓冲区中输入控制字符。缺省是
  64.       nobf。此选项应用于命令输入。
  65.       closepunct(cp=)处理结束标点列表,特别当文本自动换行(wraptype 选项)时。在多字符标点前指出字数数,例如 cp=3..;)}
  66.       。当自动换行时,vi 命令不分割关闭的标点。
  67.       directory(dir=)显示包含编辑缓冲区的目录。缺省为 dir = /var/tmp。
  68.       edcompatible(ed)在多重替换过程中,保留 g(全局)和 c(确认)子命令后缀,并使 r(读取)后缀像 r 子命令一样运作。缺省值是
  69.       noed。
  70.       exrc(exrc)如果未设置,则在初始化过程中忽略当前目录下任何 .exrc 文件,除非当前目录是 HOME 环境变量指定的。缺省是
  71. noexrc。
  72.       hardtabs(ht=)告诉 vi
  73.       编辑器显示屏幕上硬件制表符停止位之间的距离。(这个选项必须与基础的终端或终端仿真器的制表符设置相匹配。)缺省值为 ht=8。
  74.       ignorecase(ic)当搜索正则表达式时,忽略大写和小写之间的区别。缺省值是 noic。
  75.       linelimit(ll=)设置最大行数,如 -y 命令行选项。该选项只有和 .exrc 文件或 EXINIT 环境变量一起使用时有效。
  76.       lisp(lisp)除去 ( ), { }, [ [ 和 ] ] 的特殊意义,并为 s 表达式启用
  77.       =(格式打印)运算符,以便能够编辑行处理(LISP)程序。缺省是 nolisp。
  78.       list(list)显示文本和制表符 (^I) 和行的标记端($)。缺省值是 nolist。
  79.       magic(magic)当搜索一种模式时,将 .(句号)、[(左括号)和 *(星号)字符当成特殊字符。在关闭方式中,只有 ( )(圆括号)和
  80.       $(美元符)保持特殊意义。但是,可以通过在其它字符前面加上 \ (反斜杠)来激活其它字符的特殊意义。缺省是 magic。
  81.       mesg(mesg)如果以可视方式设置,打开终端的写入许可权。该选项只有和 .exrc 文件或 EXINIT 环境变量一起使用时有效。缺省值是
  82. on。
  83.       modeline(modeline)如果在文件开始五行或最后五行找到,则运行 vi 编辑器命令行。一行 vi
  84.       编辑器命令可以位于行中的任意位置。为了便于 vi 编辑器能辨认命令行,这一行必须包含一个空格或制表符,后跟 ex: 或 vi:
  85.       字符串。命令行以第二个 :(冒号)结束。vi 编辑器尝试将第一个和第二个冒号之间的任意数据解释为 vi 编辑器命令。缺省为 nomodeline。
  86.       novice指明是否处于 novice 方式。不能用 set 命令更改值。
  87.       number(nu)显示以行号作为前缀的行。缺省是 nonu。
  88.       optimize(opt)加速缺少光标寻址的终端的操作。缺省为 noopt。
  89.       paragraphs(para=)定义开始段落的 vi 宏名。缺省为 para=IPLPPPQPP\
  90.       LIpplpipnpbp。如果指定了一个段落,单字母 nroff 宏,如 .P 宏,必须以加引号字符包含空格。
  91.       partialchar(pc=)出现在最后的显示列,该列中双宽字符不完全显示。缺省字符为 -(减号)。
  92.       prompt当处于命令方式时,通过打印 :(冒号)提示输入新的编辑器命令。缺省值为 on。
  93.       readonly(ro)设置永久的只读方式。缺省为 noreadonly。
  94.       redraw(redraw)在低能工作站上模仿智能工作站。缺省为 nore。
  95.       remap允许根据其它宏来定义宏。缺省值是 on。
  96.       report(re=)设置在消息显示之前命令能重复的次数。对于产生许多消息的子命令,例如全局子命令,完成命令序列后显示消息。缺省值为
  97.       report=5。
  98.       scroll(scr=)设置在编辑器中上下滚动时滚动的行数。缺省值为窗口大小的 1/2,四舍五入。
  99.       sections(sect=)定义开始段落的 vi 宏名。缺省为 sect=NHSHHH\ HUuhsh+c。如果指定段落,单字母 nroff
  100.       宏,如 .P 宏必须以加引号字符包含空格。
  101.       shell(sh=)为 ! 子命令或 :! 子命令定义外壳程序。缺省为登录外壳程序。
  102.       shiftwidth(sw=)为 autoindent 选项、shift 命令(> 和 <)和文本输入命令(Ctrl-D 和 Ctrl-T
  103.       按键顺序)使用的软件制表符停止位设置间距。vi 选项只影响行开始的缩排。缺省值为 sw=8。
  104.       showmatch(sm)当如输入 )(右圆括号)或 } (右花括号)时显示 ((匹配的左圆括号)或 { (左花括号)。缺省为 nosm。
  105.       showmode(smd)当 vi 编辑器处于输入方式时显示消息加以指明。缺省为 nosmd。
  106.       slowopen(slow)在插入期间,延迟更新显示屏幕。缺省值为 noslow。
  107.       tabstop(ts=)在一个显示的文件中设置制表符停止位之间的间距。缺省值为 ts=8。
  108.       tags(tags =)为用 ctags 命令创建的函数名的数据库文件定义搜索路径。缺省值为 tags=tags\ /usr/lib/tags。
  109.       term(term=)设置正在使用的工作站类型。缺省值为 term=$TERM,其中 $TERM 是 TERM 外壳程序变量的值。
  110.       terse(terse)允许 vi 编辑器显示消息的短格式。缺省为 noterse。
  111.       timeout(to)为字符的进入设置两秒的时间限制。当设置 timeout
  112.       选项时,这个限制容许作为单独的字符输入和处理宏中的字符。要恢复宏的使用,需要设置 notimeout 选项。缺省值为 to。
  113.       ttytype为正在使用的终端指明 tty 类型。从 vi 编辑器不能更改这个值。
  114.       warn(warn)在 !
  115.       之前显示警告消息。当在编辑缓冲区中已经作了更改,但还没有写入文件时,如果是第一次发送外壳程序命令,那么子命令执行外壳程序命令。缺省为 warn。
  116.       window(wi=)设置显示在一个文本窗口中的行数。缺省值取决于操作时使用的波特率:600 波特或更少, 8 行;1200 波特,16
  117.       行;更高的速率,全屏减去 1 行。
  118.       wrapmargin(wm=)设置从一行到另一行自动换行的页边距。缺省值为 wm=0。0 值则关闭自动换行。
  119.       wrapscan(ws)允许字符串搜索从编辑缓冲区结尾到开始有自动换行。缺省值为 ws。
  120.       wraptype(wt=)指明用于在行尾回绕单词的方法。缺省值为 general。可以指定下列四个值中的一个:
  121.         general
  122.         允许单词中断处(如两个字符之间的空白)自动换行。此设置为缺省值。
  123.         word
  124.         允许在单词上自动换行。
  125.         rigid
  126.         允许在列上和关闭的标点之前自动换行。
  127.         flexible
  128.         允许在列上自动换行,但是一个标点符号可以扩展到页边距外后。
  129.       writeany(wa)关闭通常在write 子命令之前进行的检查。缺省值为 nowa。

  130. 要查看对缺省设置进行更改的 vi 编辑器设置列表,请输入 set 并按空格键。按 Enter 键返回到命令方式。
  131. 要查看 vi 编辑器设置的完全列表,请输入 set all。按 Enter 键返回到命令方式。
  132. 要打开一个 vi 编辑器选项, 输入 set Option。这个命令自动返回到命令方式。
  133. 要打开多个 vi 编辑器选项,输入 set Option Option Option。这命令打开三个指定的 vi 编辑器选项并返回到命令方式。
  134. 要关闭一个 vi 选项,输入 set noOption。这个命令自动返回到命令方式。
  135. 要更改一个 vi 编辑器的值,请输入 set Option=Value。这个命令自动返回到命令方式。
  136. 可以仅为这个编辑会话使用 :set vi 编辑器子命令来设置选项,或为这个编辑会话和所有将来的编辑会话设置选项。
  137. 要只为这个编辑会话设置或更改 vi 编辑器选项,从命令行输入 :set 子命令。
  138. 要为所有编辑会话设置 vi 选项,将 :set 子命令置于 .profile 文件的 EXINIT 环境变量中(该文件由登录的外壳程序读取)或将 set
  139. 子命令置于 .exrc 文件中。vi 编辑器首先查找 EXINIT 环境变量并运行它的命令。如果 EXINIT 环境变量不存在,则 vi 编辑器查找
  140. $HOME/.exrc 文件并运行它的命令。最后,不管以前的任何结果,vi 编辑器查找本地的 .exrc 文件并运行它的命令。
  141. 注:
  142. 这个过程一直成立,除了 tvi 命令(可信的 vi)。在这种情况下,vi 编辑器查找并只运行 /etc/.exrc 文件。
  143. 要获取通过设置 EXINIT 环境变量来更改选项的信息,请参阅 environment 文件中关于环境变量的描述。
  144. .exrc 文件可以包含 set Option=Value; 格式的子命令,例如:
  145. set cp=3 . . ;
  146. 要在 .exrc 文件中包含注释,将 "(双引号)作为该行中的第一个字符。
  147. 定义宏
  148. 如果经常使用一条子命令或一系列子命令,可以使用 vi 编辑器来定义发出子命令或子命令顺序的宏。
  149. 要定义一个宏,输入一系列以字母表中一个字母命名的缓冲区。小写字母 a 到 z 覆盖缓冲区的内容,大写字母 A 到 Z
  150. 将文本附加到缓冲区先前的内容,这样可以逐块构建宏。
  151. 例如,要定义命名为 c 的宏,该宏搜索单词 corner 并使单词 corner 后的第三行成为当前行,输入以下命令:
  152. o /corner/+3
  153. 然后按 ESC 键并输入以下命令:
  154. "c
  155. 其中 c 是缓冲区宏的名称。
  156. 要添加文本到已定义的缓冲区中以前的内容,输入 o viSubcommand,按 ESC 键,并输入 "CapitalLetter,其中
  157. CapitalLetter 变量指定一个从 A 到 Z 的大写字母。例如,要构建名为 T 的缓冲区宏,该宏搜索单词 corner
  158. 并允许添加更多命令,输入以下命令:
  159. o corner
  160. 然后按 ESC 键并输入以下命令:
  161. "T
  162. 其中 T 是缓冲区宏的名称。任何时候都可以重复本过程将更多的 vi 子命令添加到相同的缓冲区。
  163. 例如,要添加移动光标到前面行和删除该行的命令,输入以下命令:
  164. o -dd
  165. 这里 -(负号)意为将光标上移一行,而 dd 表示删除当前行。按 ESC 键并输入以下命令:
  166. "Tdd
  167. 要启动宏,输入 @Letter,其中 Letter 变量指定想要使用的缓冲区宏的字母名。要再使用相同的宏,输入 @@ (两个位于符号)。例如,输入 @T 启动
  168. T 缓冲区宏并运行搜索、移动光标和删除行命令。输入 @@T 以再一次启动 T 缓冲区宏。
  169. 系统使用的字符集通过对照表定义。该表影响 vi 宏的性能。
  170. 映射键
  171. 可以使用 :map、:map! 和 :ab 子命令将击键操作映射到命令或命令序列。:map 子命令在命令方式中使用。:map! 和 :ab
  172. 子命令在文本输入方式中使用。可以为这个编辑会话和所有以后的编辑会话映射键,或者仅为当前编辑会话(以两钟方式中的一种)映射键。
  173. 要为所有以后的编辑会话映射键,将子命令置于 $HOME/.exrc 文件中。vi 编辑器每次启动,会读取这个文件。映射保持对每一次编辑会话有效。
  174. 要仅从命令方式为当前的编辑会话映射键,在 vi 编辑器会话期间启动子命令。要只通过文本输入方式为当前编辑会话映射键,在 vi
  175. 编辑器会话期间在命令行上输入子命令。映射保持对当前编辑会话有效。
  176. 注意: 如果使用的是 IBM 3161 ASCII 显示站、IBM 3163 ASCII 显示站或 IBM 3101 ASCII 显示站,vi
  177. 编辑器的缺省键映射会导致数据丢失。要查看缺省映射,请发出 :map 子命令。ESC-J 或 Shift-J
  178. 按键顺序产生特殊的问题。这些按键顺序从光标的当前位置到文件尾删除所有的信息。为了避免问题出现,使用 .exrc 文件来更改这个按键顺序。
  179. :map、:map! 和 :ab 子命令按以下定义:
  180.       :map按命令方式定义宏。在 vi 编辑器中,:map 子命令允许通过按单一键来运行指定的命令或命令序列。
  181.       要按命令方式映射键,用空的编辑缓冲区启动 vi 编辑器而不用 vi 命令给 vi 文件命名或在 vi 编辑器启动后输入任何东西到缓冲区。可以使用
  182.       :map 子命令完成以下任务:
  183.         要将字符映射到编辑命令序列,输入:
  184. :map Letter viSubcommand
  185.         要按命令方式取消先前映射的字符,输入:
  186. :unmap Letter
  187.         要为命令方式显示当前映射列表,输入:
  188. :map
  189.       vi 编辑器不使用以下键,但是可以在命令方式中和 :map 子命令一起使用。
  190.         字母 s、g、K、q、V 和 v
  191.         控制键序列 Ctrl-A、Ctrl-K、Ctrl-O、Ctrl-T、Ctrl-W 和 Ctrl-X
  192.         符号 _(下划线)、*(星号)、 \ (反斜杠) 和 =(等号)
  193.       尽管可以映射已被 vi 编辑使用的键,但只要映射有效,就无法使用键的常用功能。有些终端允许将命令序列映射到功能键。如果处于 LISP
  194.       方式,=(等号)不能使用,因为它已由 vi 编辑器使用。
  195.       要映射字母 v 到命令序列,该命令序列定位的下一个出现的 map 单词并将它改成单词 MAP,请输入以下命令:
  196. :map v /map<Ctrl-V><Enter>cwMAP<Ctrl-V><Esc><Ctrl-V><Enter>
  197.       前面的示例指导 vi 编辑器定位下一个 map 的出现(/map<Ctrl-V><Enter>),将 map 更改为 MAP(cwMAP),结束
  198.       change-word 子命令(<Ctrl-V><Esc>),输入命令(<Ctrl-V><Enter>)。
  199.       注:
  200.       为了防止 vi 编辑器解释 Enter 键,当被映射时,必须在前面输入 Ctrl-V 按键顺序。此情况对 Esc、Backspace 和
  201.       Delete 键也成立。
  202.       要映射控制字符 Ctrl-A、Ctrl-K 和 Ctrl-O,同时按 Ctrl 键和相应的字母。例如,要将 Ctrl-A
  203.       按键顺序映射到保存文件和编辑系列中下一个文件命令序列,输入以下命令:
  204. :map <Ctrl-A> :w<Ctrl-V><Enter>:n<Ctrl-V><Enter>
  205.       要将映射控制字符 Ctrl-T、Ctrl-W 和 Ctrl-X,必须首先用 Ctrl-V按键顺序序为它们转义。
  206.        要映射 |(管道符),首先必须用两个 Ctrl-V 按键顺序为它转义,这通过以下示例说明:将字符 g
  207.       映射到命令序列,该命令序列转义到外壳程序,连接文件 /etc/motd 并输出到 wc 命令:
  208. :map g :!cat /etc/motd <Ctrl-V><Ctrl-V>| wc<Ctrl-V><Enter>
  209.       如果终端允许映射功能键,必须用 #number 按键顺序引用它们,以指定想映射的功能键的号码。在以下示例中,F1
  210.       功能键映射到删除单词和将光标下移三个单词的命令序列:
  211. :map #1 dwwww
  212.       为了使功能键映射起作用,功能键给终端类型的输出必须和 terminfo 文件中定义的输出相匹配。这些定义由 kfnumber 条目标志,其中,kf1
  213.       代表 F1 功能键,kf2 代表 F2
  214.       功能键,等等。如果当按功能键时所获取的输出与这个条目不匹配,在任何映射可以发生之前,必须使用终端的设置方式去纠正设置以便和这些终端数据库条目相匹配。
  215.       也可以映射某个键盘特殊键,如 Home、End、Page Up 和 Page Down 键。对于大多数的终端,这些键已经在 vi
  216.       编辑器中映射。可以通过使用 :map 子命令验证这个映射。如果这些键还没有映射,可以如下使用 :map 子命令:
  217. :map <Ctrl-V><End> G
  218. :map <Ctrl-V><Home> 1G
  219. :map <Ctrl-V><PageUp> <Ctrl-F>
  220. :map <Ctrl-V><PageDown> <Ctrl-B>
  221.       要在命令方式中获取所有当前映射,请输入 :map 子命令。前面的示例显示如下:
  222. v         v          /map<Ctrl-M>cwMAP<Ctrl-[>Ctrl-M>
  223. <Ctrl-A>  <Ctrl-A>   :w<Ctrl-M>:n<Ctrl-M>
  224. g         g          :!cat /etc/motd | wc <Ctrl-M>
  225.       注:
  226.       Ctrl-V 和 Enter 按键顺序显示为 Ctrl-M 按键顺序,而 Ctrl-V 和 Esc 按键顺序显示为 Ctrl-[ 按键顺序。
  227.       :map!当处于文本输入方式时,将字符串映射到单个键。要按文本输入方式映射键,用空的编辑缓冲区启动 vi 编辑器而不用 vi 命令给 vi
  228.       文件命名或在 vi 编辑器启动后输入任何东西到缓冲区。可以使用 :map! 子命令完成以下任务:
  229.         要按文本输入方式映射一个字母到一个或多个 vi 字符串,输入:
  230. :map! Letter String
  231.         要在文本输入方式中取消先前映射的字母,请输入:
  232. :unmap! Letter
  233.         要显示在文本输入方式已映射到特殊键的现有字符串,请输入:
  234. :map!
  235.       当处于文本输入方式时,输入映射键处理指定的字符串。Ctrl-V 和 Esc 按键顺序进入命令方式 ,回到当前单词的开始(bbw),并启动
  236.       cw(change-word)子命令。例如:
  237. :map! % <Ctrl-V><Esc>bbwcw
  238.       当输入文本时,如果意识到已经输错了一个单词,可以通过按 %(百分号)键并重新输入这个单词。编辑器自动返回到插入方式。
  239.       注:
  240.       当选择将用于 :map! 子命令的键时要特别当心。一旦键已映射,除非先发出 :unmap! 子命令,它们就不能再按文本输入。
  241.       :ab将键或按键顺序映射到字符串以用于文本输入方式。当输入具有几个重复的短句、名称或标题时,:ab 子命令十分有用。
  242.       以下示例将 city 替换为短句 Austin, Texas 78759,只要它是用文本输入方式输入并紧跟一个空格、句号或冒号:
  243. :ab city Austin, Texas 78759
  244.       例如,如果在输入文本时,输入以下内容:
  245. My current residence is city.
  246.       按 Tab 键扩展单词 city 用于阅读:
  247. My current residence is Austin, Texas 78759.
  248.       缩写在单词中不扩展。例如,如果输入 My current residence iscity,单词 iscity 不扩展。
  249.       如果 :map! 子命令用于映射缩写用于插入方式,则出现的所有缩写都被扩展,而不管它出现在什么位置。如果在前面的示例中使用 :map!
  250.       子命令(:map! city Austin, Texas 78759),那么无论什么时候输入单词 city,无论前面和后面是什么,这个单词将扩展为
  251.       Austin, Texas 78759。因此,单词 iscity 成为 isAustin, Texas 78759。
  252.       注:
  253.       当选择用于 :ab 子命令的键时,需要小心。一旦键已定义,除非先发出 :unab 子命令,它们就不能再按文本输入。

  254. 设置缩写
  255. set 命令具有与 map! 命令类似的行为,除了 set 命令仅当缩写是单个单词时以缩写形式代替字符串。可以使用 vi 编辑器的 set 命令完成以下任务:
  256.   列出现有的缩写
  257.   除去缩写
  258.   设置(定义)缩写
  259.   注:
  260.   用空编辑缓冲区启动 vi 编辑器。不要用 vi 命令给 vi 文件命名或在 vi 编辑器启动后输入任何东西到缓冲区。按 Esc 键以确保处于命令方式。
  261.         要列出缩写输入 :ab 命令来列出现有的缩写。按 Enter 键返回到命令方式。
  262.         要除去缩写输入 :anab Abbreviation 命令以除去缩写,其中 Abbreviation 变量指定不再想缩写的字符串。
  263.         要设置(定义)缩写输入 :ab Abbreviation String 命令来设置缩写,其中 Abbreviation
  264.         变量指定定义为缩写的字符串,而 String 变量指定被缩写的字符串。 只有当缩写是单独的单词时,缩写可以替代字符串。
  265.         例如, 如果输入 :ab kn upper 命令,然后当处于文本输入方式时输入 acknowledge,因为单词 acknowledge 中的
  266.         kn 字符串不是单独的单词,所以不启动 set 命令 :ab abbreviation string 命令。
  267.         然而,如果输入 :ab kn upper命令,然后当处于文本输入方式时,输入 make the kn line all kncase,结果是
  268.         make the upper line all uppercase。

  269. 标志
  270.       -cSubcommand在开始查看 vi 之前,执行 ex 编辑器子命令。光标移到被最近执行的命令影响的行。当输入一个空操作数时,如 -c'
  271.       ',vi 编辑器将光标置于文件的第一行。-c 标志不能与 + 标志兼容。不要同时指定这两个标志。
  272.       -l用 LISP 方式进入 vi 编辑器。在这种方式中,vi 编辑器适当地为 LISP 代码创建缩排,(, ), {, }, [[ 和 ]]
  273.       子命令被修改以便正确地为 LISP 进行操作。
  274.       -r[File]在 vi 编辑器或系统故障之后恢复文件。如果不指定 File 变量, vi 编辑器显示所有保存过的文件列表。
  275.       -R设置只读选项以保护文件使其不被覆盖。
  276.       -tTag编辑包含 Tag 变量的文件并将 vi 编辑器定位于它的定义。要使用该标志,必须首先使用 ctags
  277. 命令创建一个函数名及它们位置的数据库。
  278.       -v用详细方式进入 vi 编辑器。
  279.       -wNumber将缺省窗口大小设置为 Number 变量指定的值。当在低速线路上使用 vi 编辑器时,这个标志十分有用。
  280.       -yNumber用任何大于 1024 的值覆盖 1,048,560 的最大行设置。由于 vi
  281.       编辑器为缓冲区控制使用额外的行,请求的行数应该是需要的两倍。
  282.       +[Subcommand]在开始编辑之前,执行 ex 编辑器子命令。如果没有指定 Subcommand 变量,光标将置于文件的首行。这个 + 标志与
  283.       -c 标志不兼容。不要同时指定这两个标志。

  284. vi 常规子命令语法
  285. 使用以下常规语法来输入子命令:
  286. [Named_Buffer] [Operator] [Number] Object
  287. 注:
  288. 方括号标识任选项。
  289.       [Named_Buffer]指定临时文本存储区域。
  290.       [Operator]指定子命令或操作;指导 vi 编辑器。
  291.       [Number]将操作范围或行地址指定为一个整数。
  292.       Object指定操作对象,如文本对象(字符、单词、句子、段落、节、字符串)或文本位置(一行、在当前行中的位置、屏幕位置)。

  293. 在子命令之前计数
  294. 可以在许多子命令前放一个数字。vi 编辑器以下面方式中的一种解释这个数字:
  295.   转至由 Number 参数指定的行:
  296. 5G
  297. 10Z
  298.   转至由 Number 参数指定的列。
  299. 25|
  300.   上下滚动由 Number 参数指定的行数:
  301. 10Ctrl-U
  302. 10Ctrl-D
  303. vi 编辑器子命令
  304. 使用子命令执行以下种类的操作:
  305.   移动光标
  306.   编辑文本
  307.   控制文件
  308.   其它操作
  309. 移动光标
  310. 按以下方式使用子命令在文件内移动光标:
  311.   在行内移动
  312.   按字符位置在行内移动
  313.   移到单词
  314.   按行位置移动
  315.   移到句、段落或节
  316.   通过重绘屏幕移动
  317.   翻页和滚动
  318.   搜索模式
  319.   在文件中标记特殊位置并返回
  320. 在行内移动
  321. 在命令方式输入以下命令。可以通过按 Esc 键取消不完整的命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  322.       左箭头或 h 或 Ctrl-H将光标向左移动一个字符。
  323.       下箭头或 j 或 Ctrl-J 或 Ctrl-N将光标向下移动一行(它保持在同一列)。
  324.       上箭头或 k 或 Ctrl-P将光标向上移动一行(它保持在同一列)。
  325.       右箭头或 l将光标向右移动一个字符。

  326. 按字符位置在行中移动
  327. 在命令方式输入以下命令。可以通过按 Esc 键取消不完整的命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  328.       ^将光标移到第一个非空字符。
  329.       0将光标移到行的开始。
  330.       $将光移到行尾。
  331.       fx将光标移到下一个 x 字符。
  332.       Fx将光标移到最后一个 x 字符。
  333.       tx将光标移到下一个 x 字符的前一列。
  334.       Tx将光标移到下一个 x字符的后一列。
  335.       ;重复最近的 f、F、t 或 T 子命令。
  336.       ,以反方向重复最近的 f、F、t 或 T 子命令。
  337.       Number|将光标移到指定列。

  338. 移到单词
  339. 在命令方式输入以下命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  340.       w将光标移到下一个小字。
  341.       b将光标移到前一个小字。
  342.       e将光标移到小字的倒数第二个字母。
  343.       W将光标移到下一个大字。
  344.       B将光标移到前一个大字。
  345.       E将光标移到大字的倒数第二个字母。

  346. 按行位置移动
  347. 在命令方式输入以下命令。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。
  348.       H将光标移到屏幕的顶行。
  349.       L将光标移到屏幕的最后一行。
  350.       M将光标移到屏幕的中间行。
  351.       +将光标移到它的第一个非空字符的下一行。
  352.       -将光标移到它的第一个非空字符的前一行。
  353.       Enter将光标移到它的第一个非空字符的下一行。

  354. 移到句、段落或节
  355. 在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  356.       (将光标置于前一句的开始,或前一个 s-表达式(如果处于 LISP 方式)。
  357.       )将光标置于下一句的开始,或下一个 s-表达式(如果处于 LISP 方式)。
  358.       {将光标置于前一个段落的开始,或下一个列表(如果处于 LISP 方式)。
  359.       }将光标置于下一个段落的开始,如果处于 C 方式,则置于下一节,或者如果处于 LISP 方式则置于下一列表。
  360.       ]]将光标置于下一节,或者函数(如果处于 LISP 方式)。
  361.       [[将光标置于前一节,或者函数(如果处于 LISP 方式)。

  362. 通过重绘屏幕移动
  363. 在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  364.       z用当前行重绘屏幕顶部。
  365.       z-用当前行重绘屏幕底部。
  366.       z.用当前行重绘屏幕中间。
  367.       /Pattern/z-用包含由 Pattern 参数指定的字符串的行重绘屏幕底部。

  368. 翻页和滚动
  369. 在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  370.       Ctrl-U向上滚动 1/2 屏幕。
  371.       Ctrl-D向下滚动 1/2 屏幕。
  372.       Ctrl-F向前滚动一个屏幕。
  373.       Ctrl-B向后滚动一个屏幕。
  374.       Ctrl-E将窗口向下滚动一行。
  375.       Ctrl-Y将窗口向上滚动一行。
  376.       z+向上翻页
  377.       z^向下翻页

  378. 搜索模式
  379. 在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  380.       [Number]G将光标置于由 Number 参数指定的行号,或者最后一行(如果没有指定 Number 参数)。
  381.       /Pattern将光标置于包含由 Pattern 参数指定的字符串的下一行。
  382.       ?Pattern将光标置于包含由 Pattern 参数指定的字符串的上一行。
  383.       n在同一方向重复上次对 Pattern 参数指定的文本的搜索。
  384.       N在相反方向重复上次对 Pattern 参数指定的文本的搜索。
  385.       /Pattern/+Number将光标置于在与 Pattern 参数指定字符串相匹配的行的后面指定的行数。
  386.       ?Pattern?-Number将光标置于在与 Pattern 参数指定字符串相匹配的行的前面指定的行数。
  387.       %查找与当前光标位置的括号或大括号相匹配的括号或大括号。

  388. 编辑文本
  389. 用于编辑的子命令使您能执行以下任务:
  390.   在文件中标记具体位置并返回
  391.   添加文本到文件
  392.   当处于输入方式时更改文本
  393.   从命令方式更改文本
  394.   复制和移动文本
  395.   恢复和重复更改
  396. 在文件中标记具体位置并返回
  397. 在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  398.       "将光标移到当前行的前一位置。
  399.       "将光标移到包含当前行前一位置的行的开始。
  400.       mx用 x 参数指定的字母标记当前位置。
  401.       `x将光标移到由 x 参数指定的标记。
  402.       'x将光标移到包含由 x 参数指定的标记的行的开始。

  403. 添加文本到文件(文本输入方式)
  404. 在命令方式输入以下命令,将 vi 编辑器更改为文本输入方式。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。
  405.       aText在光标后面插入由 Text 参数指定的文本。按 Esc 键结束文本输入方式。
  406.       AText添加由 Text 参数指定的文本到行尾。按 Esc 键结束文本输入方式。
  407.       iText在光标前面插入由 Text 参数指定的文本。按 Esc 键结束文本输入方式。
  408.       IText在行中的第一个非空字符前插入由 Text 参数指定的文本。按 Esc 键结束文本输入方式。
  409.       o在当前行的下面添加一个空行。按 Esc 键结束文本输入方式。
  410.       O在当前行的上面添加一个空行。按 Esc 键结束文本输入方式。

  411. 当处于输入方式时更改文本
  412. 仅当处于文本输入方式时使用以下子命令。这些命令在命令方式中有不同的意思。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  413.       Ctrl-D回退到前一个自动缩排停止位。
  414.       ^ Ctrl-D只结束该行的自动缩排。
  415.       0Ctrl-D将光标退回到左页边。
  416.       Esc结束插入并返回到命令状态。
  417.       Ctrl-H擦除上个字符。
  418.       Ctrl-Q如果 xon 禁用则输入任意字符。
  419.       Ctrl-V输入任意字符
  420.       Ctrl-W擦除上个的小字。
  421.       \引用擦除并杀死字符。
  422.       Ctrl-?中断和结束插入或 Ctrl-D 按键顺序。

  423. 从命令方式更改文本
  424. 在命令方式使用以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  425.       C更改行的剩余部分(同 c$ 一样)。
  426.       cc更改一行
  427.       cw更改一个单词
  428.       cwText将字更改为 Text 参数指定的文本。
  429.       D删除行的剩余部分(同 d$ 一样)。
  430.       dd删除一行。
  431.       dw删除一个单词。
  432.       J连接行。
  433.       rx用 x 指定的字符替换当前字符。
  434.       RText用 Text 参数指定的文本覆盖字符。
  435.       s替代字符(同 cl 一样)。
  436.       S替代行(同 cc 一样)。
  437.       u撤销上次更改。
  438.       x删除光标位置的字符。
  439.       X删除光标前的一个字符(同 dh 一样)。
  440.       <<将一行向左移位。
  441.       <L将所有的行从光标位置向左移到屏幕末尾。
  442.       >>将一行向右移位。
  443.       >L将所有的行从光标位置向右移到屏幕末尾。
  444.       ~将光标位置的字母更改为相反的大小写格式。
  445.       !缩排 LISP。

  446. 复制和移动文本
  447. 在命令方式使用以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  448.       p在光标之后将撤销缓冲区中的文本还原。
  449.       P在光标之前将缓冲区中的文本还原。
  450.       "xp将 x 缓冲区中的文本还原
  451.       "xd将文本删除到 x 缓冲区。
  452.       y将跟随的对象(例如 word 为w)放到撤销缓冲区。
  453.       "xy将跟随的对象放到 x 缓冲区,其中 x 为任意字母。
  454.       Y将行放到撤销缓冲区。

  455. 恢复和重复更改
  456. 在命令方式使用以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  457.       u撤销最后一次更改。
  458.       注:
  459.       撤销后,光标移到更新过的当前行的第一个非空字符。
  460.       U如果最后一次更改以来光标还没有离开行,则恢复当前行。
  461.       .重复上次更改或增加 "np 命令。
  462.       注:
  463.         这条子命令将重复最后一次的更改,包括一条撤销命令。因此,一次撤销后,重复一次撤销而不是最后一次更改。
  464.         这条子命令不是为和宏一起使用设计的。输入 @@ (两个位于字符)以重复宏。

  465.       "n p检索完整行和行块的倒数第 n 次删除。

  466. 操作文件
  467. 用于操作文件的子命令允许执行在以下各节中概述的任务:
  468.   将更改保存至文件
  469.   编辑另一文件
  470.   编辑一系列文件
  471.   查找文件信息
  472. 将更改保存至文件
  473. 在命令方式使用以下命令。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。
  474.       :w将编辑缓冲区内容写到原始文件中。如果正在 ex 编辑器中使用这条子命令,不必输入 :(冒号)。
  475.       :w File将编辑缓冲区内容写入由 File 参数指定的文件中。如果正在 ex 编辑器中使用这条子命令,不必输入 :(冒号)。
  476.       :w! File用缓冲区内容覆盖由 File 参数指定的文件。如果正在 ex 编辑器中使用这条子命令,不必输入 :(冒号)。

  477. 编辑另一文件
  478. 在命令方式输入以下命令。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。
  479.       :e File编辑指定文件。如果正在从 ex 编辑器使用这条子命令,不必输入 :(冒号)。
  480.       :e!重新编辑当前文件并废弃所有更改。
  481.       :e + File从最后开始编辑指定文件。
  482.       :e + Number File从指定行号开始编辑指定文件。
  483.       :e #编辑备用文件。在用 :e
  484.       命令访问另一个文件之前,备用文件通常是以前的文件名。但是,如果当调用一个新文件时在当前文件中暂挂更改,那么新文件成为备用文件。这条子命令和
  485.       Ctrl-A 子命令相同。
  486.       :r File通过在当前行下面添加新行,将文件读取到编辑缓冲区。如果正在从 ex 编辑器使用这条子命令,不必输入 :(冒号)。
  487.       :r !Command通过在当前光标位置下面添加新行,运行指定命令并将它的输出放到文件中。
  488.       :ta Tag从标记位置开始,编辑包含 Tag 标记符的文件。要使用这条子命令,必须首先使用 ctags
  489.       命令创建一个函数名及它们位置的数据库。如果正在从 ex 编辑器使用这条子命令,不必输入 :(冒号)。
  490.       Ctrl-A编辑备用文件。备用文件通常使用前个当前文件名。但是,如果当调用一个新文件时在当前文件中暂挂更改,那么新文件成为备用文件。这条子命令和
  491.       :e # 子命令相同。

  492. 编辑文件列表
  493. 在命令方式输入以下命令。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。
  494.       :n编辑命令行上输入的列表中的下一个文件。如果正从 ex编辑器使用这条子命令,则不需要 :(冒号)。
  495.       :n Files指定将要编辑的文件的新列表。如果正从 ex 编辑器使用子命令,则不需要 :(冒号)。

  496. 查找文件信息
  497. 在命令方式输入以下子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  498.       Ctrl-G显示当前文件名、当前行号、文件中行数和光标定位于文件整体的百分比。

  499. 其它操作
  500. vi 编辑器提供以下各节描述的子命令:
  501.   调整屏幕
  502.   输入外壳程序命令
  503.   中断和结束 vi 编辑器
  504. 调整屏幕
  505. 在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  506.       Ctrl-L清除和重绘屏幕。
  507.       Ctrl-R重绘屏幕和消除标有 @ (位于符号)的空行。
  508.       zNumber使窗口长度能显示指定行数。

  509. 输入外壳程序命令
  510. 以下子命令允许在 vi 编辑器内运行命令。在命令方式输入以下命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。
  511.       :sh进入外壳程序以便能运行多条命令。通过按 Ctrl-D 按键顺序可以返回到 vi 编辑器。如果正在 ex 编辑器中使用这条子命令,则不需要
  512.       :(冒号)。
  513.       :!Command运行指定的命令然后返回到 vi 编辑器。如果正在 ex 编辑器中使用这条子命令,则不需要 :(冒号)。
  514.       注:
  515.       当后跟 :! 子命令时,#(备用文件)、%(当前文件)和 ! (前面的命令)特殊字符都会扩展。要避免这些字符中的任意字符被扩展,可使用 \
  516.       (反斜杠)。
  517.       :!!重复最近一次的 :!Command 子命令。
  518.       Number!!Command运行指定的命令并用命令输出替代由 Number 指定的行。如果没有指定数目,则缺省值是
  519.       1。如果命令需要标准输入,则指定的行用作输入。
  520.       !Object Command运行指定命令,并用命令输出替代由 Object 参数指定的对象。如果命令需要标准输入,则指定的对象用作输入。

  521. 中断和结束 vi 编辑器
  522. 在命令方式输入以下命令。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。
  523.       Q以命令方式进入 ex 编辑器。
  524.       ZZ退出 vi 编辑器,保存更改。
  525.       :q退出 vi 编辑器。如果更改了编辑缓冲区的内容,vi 编辑器显示一条警告消息并且不退出。如果正从 ex编辑器使用这条子命令,则不需要
  526. :(冒号)。
  527.       :q!退出 vi 编辑器,废弃编辑缓冲区。如果正从 ex编辑器使用这条子命令,则不需要 :(冒号)。
  528.       Esc结束文本输入或结束一条不完整的子命令。
  529.       Ctrl-?中断一条子命令。

  530. 出口状态
  531. vi 命令返回以下出口值:
  532.       0指示成功完成。
  533.       >0指示发生错误。

  534. 输入文件
  535. 输入文件必须是文本文件或和文本文件相似的文件,除了长度不超过 LINE_MAX -1 字节并且包含非空字符的不完整的最近行。
  536. .exrc 文件必须是由 ex 命令组成的文本文件。
  537. 缺省情况下,vi 编辑器从被编辑的文件读取文本,而不将这些行中任意一行解释成任何格式的 vi 编辑器命令。

复制代码

论坛徽章:
0
4 [报告]
发表于 2004-03-19 17:06 |只看该作者

AWK、SED、GREP、VI在AIX5.2下的MAN文档

施主真是功德无量.

BTW:怎么man能直接出来中文的文档?

论坛徽章:
0
5 [报告]
发表于 2004-03-19 17:07 |只看该作者

AWK、SED、GREP、VI在AIX5.2下的MAN文档

精华

论坛徽章:
0
6 [报告]
发表于 2004-03-19 17:15 |只看该作者

AWK、SED、GREP、VI在AIX5.2下的MAN文档

这么快就有回复,真是惊喜!
喜欢!!

论坛徽章:
0
7 [报告]
发表于 2004-03-19 17:16 |只看该作者

AWK、SED、GREP、VI在AIX5.2下的MAN文档

收藏了,我也有点疑惑,怎么可以直接man出中文的帮助啊?
长见识了。

建议将vi的man文档也转到这里来。

论坛徽章:
0
8 [报告]
发表于 2004-03-19 17:18 |只看该作者

AWK、SED、GREP、VI在AIX5.2下的MAN文档

[quote]原帖由 "bjgirl"]精华[/quote 发表:


谢谢老大赏脸!
您老还不是awk/sed/grep的活文档?!

论坛徽章:
0
9 [报告]
发表于 2004-03-19 17:21 |只看该作者

AWK、SED、GREP、VI在AIX5.2下的MAN文档

原帖由 "skydog2002" 发表:
收藏了,我也有点疑惑,怎么可以直接man出中文的帮助啊?
长见识了。

建议将vi的man文档也转到这里来。


参见http://bbs.chinaunix.net/forum/24/20040316/281965.html

论坛徽章:
0
10 [报告]
发表于 2004-03-19 17:29 |只看该作者

AWK、SED、GREP、VI在AIX5.2下的MAN文档

原帖由 "skydog2002" 发表:
收藏了,我也有点疑惑,怎么可以直接man出中文的帮助啊?
长见识了。

建议将vi的man文档也转到这里来。
如果你用linux的话,可以执行vimtutor,这是一个简单教程哟 @_@
to 楼主:我还不老的说
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP