`

sed系列:文件多行操作

 
阅读更多
Sed reads line by line, removes any trailing new lines, places a line in a pattern space buffer, process as per the given commands and prints the pattern space.
n case, if you want to delete all the newlines in a file, you cannot use the following method. Because newline is already removed and placed in the pattern space.
$ sed 's/\n//' filename or  $sed 's/\n/ENDOFLINE\n/' filename
For situations like this sed multi-line is appropriate. Sed provides the command “N” for Multi-Line Operations.
N command reads a next line from the input, Append next line to pattern space. Next line is separated from the original pattern space by a newline character.
先让我们建立测试用例
$cat thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)


Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.
Note: There are two consecutive blank lines in the above input. ( 5th and 6th line ).
例1:用@符号连接相连两行
$sed '{
N
s/\n/ @ /
}' thegeekstuff.txt
Linux Sysadmin @ Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc. @ Security (Firewall, Network, Online Security etc)
@
Storage in Linux @ Website Design
Website Design @ Windows- Sysadmin, reboot etc.
$
The curly braces “{” and “}” used to group the commands. The curly braces and sed commands must be on the seperate lines.
Sed reads the first line and place it in the pattern space, N command reads the next line and appends with the pattern space i.e first line seperated by newline. So now pattern space will have firstline\nsecondline.
Next substitution of \n to space@space and it prints the pattern space content as its sed default behaviour. So consecutive lines are joined and delimited by ” @ “
例2:显示非空行行号
= is a command to get a line number of a file.
$sed '/./=' thegeekstuff.txt
1
Linux Sysadmin
2
Databases - Oracle, mySQL etc.
3
Databases - Oracle, mySQL etc.
4
Security (Firewall, Network, Online Security etc)


7
Storage in Linux
8
Website Design
9
Website Design
10
Windows- Sysadmin, reboot etc.
$sed '/./=' thegeekstuff.txt | sed 'N; s/\n/ /'
1 Linux Sysadmin
2 Databases - Oracle, mySQL etc.
3 Databases - Oracle, mySQL etc.
4 Security (Firewall, Network, Online Security etc)

7 Storage in Linux
8 Website Design
9 Website Design
10 Windows- Sysadmin, reboot etc.
$
The first sed command prints the line number and prints the original line in a next line if it is not a blank.( Execute it and see the output of the first sed command ).
Next sed command is just appends pair of lines.
例3:删除相邻的两个空行
$sed '/^$/{
> N
> /^\n$/d
> }' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.
$
If the line is blank, read and appends the next line, /^\n$/ represents, two lines are empty,\n is added by N command. Then just delete the pattern space and start the next cycle using command ‘d’.
例4:删除文件最后两行
Before viewing this example you must aware of two interesting sed command.
P – which prints the first line of a pattern space. (till first \n).
D – Delete first line from the pattern space. Control then passes to the top of the script.
$ sed 'N;$!P;$!D;$d' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design

Reads the first line and place it in the pattern space.
N command reads the next line and append to pattern space seperated by newline. (Now firstline\nsecond line)
If it not reaches the last line($), print the first line and delete the first line alone from the pattern space. Then cycle starts again.
Like this it joins 2nd\n3rd lines, 3rd\n4th lines and goes on.
Atlast when it has 9th\n10th line in a pattern space, it reaches $ so it just deletes the pattern space. ($!P and $!D wont print and delete if it is $).

例5:输出文件最后两行
$ sed '$!N;$!D' thegeekstuff.txt
Website Design
Windows- Sysadmin, reboot etc.

例6:删除相邻的两个相同行
The below command checks each line joined with the next line, check if both are same then it doesn’t the print pattern space(!P), just delete the first line from the pattern space. So only one line will be remaining in the pattern space.
$ sed '$!N; /^\(.*\)\n\1$/!P; D' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
Windows- Sysadmin, reboot etc.
$
分享到:
评论

相关推荐

    sed高级用法学习笔记和实例

    - **非交互式**:sed不是交互式的编辑器,它不需要用户实时输入命令,而是通过命令行或者脚本文件来执行一系列预定义的编辑操作。 - **行编辑**:sed每次只处理一行文本,因此特别适合处理大型文件,因为它不需要将...

    SED使用手册.pdf

    - **多功能性**: 对于需要执行一系列复杂编辑操作的文件,`sed` 可以一次性完成多项任务,如删除空白行、替换字符串以及在特定位置插入文本。 ##### 1.2 何处获得 sed - **预装**: 大多数 UNIX 系统都默认安装了 `...

    sed and awk 101 hacks.pdf

    - **sed脚本文件**:可以通过脚本文件来执行一系列sed命令。 - **sed注释**:在sed脚本中,可以使用"#"作为注释的开始。 - **直接修改输入文件**:sed的-i选项可以用来直接修改文件内容。 **sed附加命令** - **追加...

    sed命令详解

    sed的工作方式是通过一系列指令对输入文本进行操作,并将处理后的结果输出到标准输出设备(通常是屏幕),除非另有指定(例如通过重定向到文件)。 #### 2. sed的工作流程 sed编辑器的工作原理是逐行处理输入的...

    sed命令详解 快速入门

    3. **命令**: `sed`支持一系列内置命令来进行文本处理。这些命令可以单独使用,也可以通过管道连接起来形成复杂的文本处理流程。 #### 三、sed命令详解 ##### 1. 基本命令格式 - **调用格式**: `sed [选项] '命令...

    linux系统常用命令sed使用手册

    sed特别适用于处理大量文件中的重复性编辑操作,比如替换特定字符串、删除空白行或者执行复杂的文本转换。 #### 二、何时使用sed 当用户需要对文件执行重复性的编辑任务时,sed非常有用。例如,将一个文件中的所有...

    sed手册(全面)

    - **自动化重复任务:** 当需要对文件进行重复性编辑操作时,比如替换特定文本、删除某些行等,使用 `sed` 可以极大地提高效率。 - **批量文件编辑:** 需要对大量文件进行同样的编辑时,`sed` 是一个非常实用的工具...

    Sed AWK编程指南

    在实际应用中,我们经常需要编写一系列的`sed`命令来完成复杂的文本处理任务。这些命令可以被组织成一个脚本,其执行流程大致如下: 1. **读取输入**:逐行读取文件中的内容。 2. **执行命令**:根据命令对每一行...

    sed 高级用法

    当一行数据处理完成后,该行会被输出,模式空间随之清空,并读取下一行数据继续处理,直至文件处理完毕。 #### 高级命令分类 根据提供的内容,sed 的高级命令可以大致分为三类: 1. **处理多行模式空间**:包括 N...

    sed和awk简明手册

    - sed的工作方式类似于将一系列编辑指令应用于一个文本流,这些指令可以用来对文件进行处理而无需直接编辑文件本身。 - sed的一个主要优点是可以在一个地方指定所有的编辑指令,并通过文件传递一次来执行它们,...

    linux sed命令详解

    在处理过程中,`sed`会将每一行内容存储在内存中的一个名为“模式空间”(Pattern Space)的缓冲区内,然后应用一系列预定义的命令来修改该行的内容。一旦处理完成,这一行的内容会被输出到标准输出设备(通常是终端...

    GNU sed manual说明书

    sed脚本包含一系列的命令,这些命令可以对文本进行插入、删除、替换等操作。常见的命令包括s(替换)、d(删除)、p(打印)等。而sed还具有一些高级命令,通常不太常用,但在处理复杂文本任务时非常有用。 GNU sed...

    sed&awk第二版英文版pdf

    上述知识点仅是正文中出现的一些内容,实际PDF文件中对sed和awk的介绍更加详尽。对于计算机专业人员来说,掌握这些知识是处理和分析文本数据的关键基础,能够极大提高工作效率和解决问题的能力。同时,通过阅读英文...

    awk&sed; PDF文档学习资料

    - **多行操作**:sed可以对多行进行操作,例如合并多行。 - **脚本文件**:可以通过创建sed脚本来执行一系列命令。 - **地址范围**:sed支持使用地址范围来限制命令的执行范围。 ##### 示例 将文件中的第一行和第二...

    sed基础教程

    sed允许用户指定一个脚本,该脚本包含一系列命令,这些命令可以对输入的文本数据进行编辑处理,如插入、删除或替换文本。 本教程旨在介绍sed的基本概念和使用方法,适合初学者快速掌握其基础用法。对于有经验的用户...

    shell中常见命令与awk,sed的等价命令

    本文将详细介绍一系列常用的shell命令及其在`awk`和`sed`中的等价实现方法。 #### 二、等价命令详解 ##### 1. `cat` **Shell命令:** `cat <file>` **Sed等价命令:** `sed 'p' <file>` **Awk等价命令:** `awk '{...

    Sed - An Introduction and Tutorial by Bruce Barnett

    它能够读取输入流,对其进行一系列预定义的编辑操作,并将结果输出到另一个流中,而无需在磁盘上创建临时文件。Sed支持各种各样的命令,包括替换、删除、插入、打印等,这些命令可以单独使用,也可以组合起来进行...

    linux 命令基础

    - `sed`:流编辑器,用于处理数据流,不改变原文件,如`sed 's/unix/UNIX/' intro`。 通过以上这些基础命令的学习,你可以进行基本的文件操作、进程查看、输入输出管理和数据处理。随着经验的增长,你还可以进一步...

Global site tag (gtag.js) - Google Analytics