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

📄 472.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 4 页
字号:
p  印出资料。   <br>
P  印出 pattern space 内第一个 newline 字母  前的资料。   <br>
q  跳出 sed 编辑。   <br>
r  读入它档内容。   <br>
s  替换字串。   <br>
t label  先执行一替换的编辑指令 , 如果替换成牛p&gt;则将编辑指令跳至 : label 处执行。   <br>
w  写资料到它档内。   <br>
x  交换 hold space 与 pattern space 内容。   <br>
y  转换(transform)字元。   <br>
虽然 , sed 只有上表所述几个拥有基本编辑功能的函数 , 但由指令中位址参数和指令与指令间的配合 , 也能使  <br>
sed 完成大部份的编辑任务。  <br>
2.3 执行档案内的编辑指令  <br>
   当执行的指令太多 , 在命令列上撰写起来十分混乱 , 此时 , 可将这些指令整理储存在档案 <br>
   (譬如档名为 script_file )内 , 用选项 -f script_file , 则让 sed 执行 script_file 内的编辑指令。其命 <br>
   令的格示如下 :  <br>
      sed -f script_file 文件档   <br>
<br>
其中 , 执行 script_file 内编辑指令的顺序是由上而下。例如上一节的例子 , 其可改成如下命令:  <br>
      sed -f ysb.scr yel.dat   <br>
<br>
其中 , ysb.scr 档的内容如下 :  <br>
1,10d <br>
s/yellow/black/g <br>
<br>
   另外 , 在命令列上可混合使用选项 -e 与 -f , sed 执行指令顺序依然是由命令列的左到右, 如执行至 -f 後 <br>
   档案内的指令 , 则由上而下执行。  <br>
<br>
<br>
2.4 执行多个文件档的编辑  <br>
   在 sed 命令列上 , 一次可执行编辑多个文件档 , 它们跟在编辑指令之後。例如 , 替换 <br>
    white.dat、red.dat、black.dat 档内的 "yellow" 字串成 "blue" , 其命令如下:  <br>
       sed -e 's/yellow/blue/g' white.dat red.dat black.dat  <br>
<br>
上述命令执行时 , sed 依 white.dat、red.dat、black.dat 顺序 , 执行编辑指令 s/yellow/blue/(请参照[section 4.1] ,  <br>
进行字串的替换。 <br>
<br>
2.5.执行输出的控制  <br>
   在命令列上的选项 -n (解[7]) 表示输出由编辑指令控制。由前章内容得知 , sed 会 "自动的" 将资料由 <br>
    pattern space 输送到标准输出档。但藉着选项 -n , 可将 sed 这 "自动的" 的动作改成 "被动的" 由它所执行的 <br>
    编辑指令(解[8])来决定结果是否输出。  <br>
   由上述可知 , 选项 -n 必须与编辑指令一起配合 , 否则无法获得结果。例如 , 印出 white.dat 档内含有 "white"  <br>
   字串的资料行 , 其命令如下:  <br>
<br>
       sed -n -e '/white/p' white.dat    <br>
<br>
上面命令中 , 选项 -n 与编辑指令 /white/p (参照[section4.6]) 一起配合控制输出。其中 , 选项 -n 将输出控制权 <br>
移给编辑指令;/white/p 将资料行中含有 "white" 字串印出萤幕。  <br>
 <br>
 <br>
<br>
SED 手册 - 3.例 <br>
http://phi.sinica.edu.tw aspac@phi.sinica.edu.tw (2001-07-29 13:05:00) <br>
<br>
   一般在实际使用编辑器的过程中 , 常需要执行替换文件中的字串、搬移、删除、与搜寻资料行等等动作。 <br>
   当然 , 一般交谈式编辑器(如 vi、emacs)都能做得到上述功能 , 但文件一旦有大量上述编辑需求时 , 则 <br>
   用它们编辑十分没有效率。本章将用举例的方式说明如何用 sed 自动执行这些编辑功能。此外 , 在本章 <br>
   例中 , 均以下述方式描述文件的需求 :  <br>
            将文件中...资料 , 执行...(动作) <br>
<br>
如此 , 目的是为了能将它们迅速的转成编辑指令。其中 , " ...资料" 部份 , 转成指令中的位址参数表示 ;  <br>
"执行...动作" 部份 , 则转成函数参数表示 。另外 , 当 "执行...动作" 要由数个函数参数表示时 , 则可利 <br>
用 "{ "与 " }" 集合这些函数参数(解[9]) , 其指令形式如下 :  <br>
         位址参数{ <br>
                 函数参数1 <br>
                 函数参数2 <br>
                 函数参数3 <br>
                     . <br>
                     : <br>
                  } <br>
<br>
上述指令表示 , 将对符合位址参数的资料 , 依次执行函数参数1、函数参数2、函数参数3 ... 表示的动作。 <br>
下面各节 , 分别举例说明 sed 替换资料、移动、删除资料、及搜寻资料的命令。  <br>
3.1 替换文件中的资料  <br>
3.2 搬动文件中的资料  <br>
3.3 删除文件中的资料  <br>
3.4 搜寻文件中的资料  <br>
3.1 替换文件中的资料  <br>
   Sed 可替换文件中的字串、资料行、甚至资料区。其中 , 表示替换字串的指令中的函数参数为 s(参照[section4.1]);  <br>
   表示替换资料行、或资料区的指令中的函数参数为 c(参照[section4.5])。上述情况以下面三个例子说明。上述情况 <br>
   以下面三个例子说明。  <br>
例一. 将文件中含 "machine" 字串的资料行中的 "phi" 字串 , 替换成为 "beta" 字串。其命令列如下 :  <br>
sed -e '/machine/s/phi/beta/g' input.dat(以後文件档都以 input.dat 代表)  <br>
<br>
例二. 将文件中第 5 行资料 , 替换成句子 "Those who in quarrels interpose, must often wipe a bloody nose."。 <br>
其命令列如下  <br>
sed -e '5c <br>
Those must often wipe a bloody nose. <br>
' input.dat <br>
<br>
例三. 将文件中 1 至 100 行的资料区 , 替换成如下两行资料 :  <br>
How are you? <br>
data be deleted! <br>
<br>
则其命令列如下  <br>
sed -e '1,100c <br>
How are you? <br>
data be deleted! <br>
' input.dat <br>
<br>
3.2 搬动文件中的资料  <br>
   使用者可用 sed 中的 hold space 暂存编辑中的资料、用函数参数 w(参照[section4.9])将文件资料搬动到它档内储存、 <br>
   或用函数参数 r(参照[section4.8])将它档内容搬到文件内。Hold space 是 sed 用来暂存 pattern space 内资料的暂 <br>
   存器 , 当 sed 执行函数参数 h、H(参照[section4.19])时 , 会将 pattern space 资料暂存到 hold space;当执行函 <br>
   数参数 x、g、G(参照[section4.22])时 , 会将暂存的资料取到 pattern space 。下面举三个例子说明。  <br>
例一. 将文件中的前 100 资料 , 搬到文件中第 300 後输出。其命令列如下 : <br>
<br>
sed -f mov.scr 文件档 <br>
<br>
mov.scr 档的内容为  <br>
1,100{ <br>
H <br>
d <br>
} <br>
300G <br>
<br>
其中 ,  <br>
  <br>
1,100{ <br>
H <br>
d <br>
} <br>
<br>
它表示将文件中的前 100 资料 , 先储存(参照[section4.19])在 hold space 之後删除 ;指令 300G (参照[section4.22])  <br>
表示 , 将 hold space 内的资料 , 添加在文件中的第 300 资料後输出。  <br>
例二. 将文件中含 "phi" 字串的资料行 , 搬至 mach.inf 档中储存。其命令列如下 :  <br>
sed -e '/phi/w mach.inf' 文件档 <br>
<br>
例三. 将 mach.inf 档内容 , 搬至文件中含 "beta" 字串的资料行。其命令列如下 :  <br>
sed -e '/beta/r mach.inf' 文件档 <br>
<br>
另外 , 由於 sed 是一 stream(参照[section1.4])编辑器 , 故理论上输出後的文件资料不可能再搬回来编辑。  <br>
<br>
3.3 删除文件中的资料  <br>
   因为 sed 是一行编辑器 , 所以 sed 很容易删除个别资料行或整个资料区。一般用函数参数 d(参照[section4.2])或 <br>
    D(参照[section4.17]) 来表示。下面举两个例子说明。  <br>
将文件内所有空白行全部删除。其命令列为  <br>
      sed -e '/^$/d' 文件档 <br>
<br>
regular expression(解[附录 A]) , ^$ 表示空白行。 其中 , ^ 限制其後字串必须在行首; $ 限制其前字串必须在行尾。  <br>
将文件内连续的空白行 , 删除它们成为一行。其命令列为  <br>
   sed -e '/^$/{ <br>
   N <br>
   /^$/D  <br>
   }' 文件档 <br>
<br>
其中 , 函数参数 N(参照[section4.16])表示 , 将空白行的下一行资料添加至 pattern space 内。函数参数 /^$/D 表示 ,  <br>
当添加的是空白行时 , 删除第一行空白行 , 而且剩下的空白行则再重新执行指令一次。指令重新执行一次 , 删除一行空白行 ,  <br>
如此反覆直至空白行後添加的为非空白行为止 , 故连续的空白行最後只剩一空白行被输出。  <br>
3.4 搜寻文件中的资料  <br>
   Sed 可以执行类似 UNIX 命令 grep 的功能。理论上 , 可用 regular expression(参照[附录 A])。例如 , 将文件中含 <br>
   有 "gamma" 字串的资料行输出。则其命令列如下:  <br>
                 sed -n -e '/gamma/p' 文件档 <br>
<br>
   但是 , sed 是行编辑器 , 它的搜寻基本上是以一行为单位。因此 , 当一些字串因换行而被拆成两部份时 , 一般的方法 <br>
   即不可行。此时 , 就必须以合两行的方式来搜寻这些资料。其情况如下面例子:  <br>
例. 将文件中含 "omega" 字串的资料输出。其命令列如下  <br>
<br>
sed -f gp.scr 文件档 <br>
<br>
gp.scr 档的内容如下 :  <br>
/omega/b <br>
N <br>
h <br>
s/.*// <br>
/omega/b <br>
g <br>
D <br>
<br>
在上述 sed script(解[10]), 因藉着函数参数 b 形成类似 C 语言中的 case statement 结构 , 使得 sed 可分别处理当 <br>
资料内含 "omega" 字串 ; 当 "omega" 字串被拆成两行 ; 以及资料内没有"omega" 字串的情况。接下来就依上述的三种情 <br>
况 , 将 sed script 分成下面三部份来讨论。  <br>
当资料内含 "omega" , 则执行编辑指令  <br>
/omega/b <br>
<br>
它表示当资料内含 "omega" 字串时 , sed 不用再对它执行後面的指令 , 而直接将它输出。  <br>
当资料内没有"omega" , 则执行编辑指令如下  <br>
N <br>
h <br>
s/.*// <br>
/omega/b <br>
<br>
其中 , 函数参数 N(参照[section 4.16]) , 它表示将下一行资料读入使得 pattern space 内含前後两行资料 。函数参 <br>
数 h(参照[section 4.19]) , 它表示将 pattern space 内的前後两行资料存入 hold space 。函数参数 s/.*// , 它 <br>
表示将 pattern space 内的前後两行资料合(解[11])成一行。/omega/b , 它表示如果合後的资料内含 "omega" 字 <br>
串 , 则不用再执行它之後的指令 , 而将此资料自动输出 ;  <br>
<br>
当合後的资料依旧不含 "omega" , 则执行编辑指令如下  <br>
g <br>
D <br>
<br>
其中 , 函数参数 g(参照[section4.21]) , 它表示将 hold space 内合前的两行资料放回 pattern space。 函数参数  <br>
D(参照[section4.17]) , 它表示删除两行资料中的第一行资料 , 并让剩下的那行资料 , 重新执行 sed script。如此 ,  <br>
无论的资料行内或行间的字串才可搜寻完全。  <br>
 <br>
 <br>

⌨️ 快捷键说明

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