良玉的博客 点点滴滴,积水成河_良玉的博客_页游、手游linux运维工程师之路

sed按条件多行合并为一行

其实就是一个多行合并为一行的问题, 仔细看看, 可以理解为当读取到lib关键字的时候倒序排列成一行, 这里我们利用G这个函数, 其目的就是把hold space里的内容追加到当前pattern中, 第一行时G追加hold space里的内容到pattern space后, 中间用'\n'连接, 当时hold space里没有内容, 其实就是添加了一个换行符而已, 然后继续执行命令, 没有匹配到lib关键字, 不执行花括号里的操作, 执行h函数操作, 把当前行的内容(就是第一行的内容后面多加了一个换行符)覆盖到hold space里, 第二行时执行G函数, 这时候pattern space里的内容已经变成了gb=line1\nclone=line1, 这时候也没有匹配到lib, 那么继续执行h, 这样就相当于倒序排列了内容. 执行到第四行, 匹配到lib时候, 我们把所有的换行符替换为空格, 并且打印内容, 执行n操作, 把stream执行到下一行, 用下一行的内容来覆盖hold space里的内容, 这样就相当于清楚了之前hold space里的记录.

阅读全文...

sed命令学习笔记

1.简介
sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。
sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。


阅读全文...

sed实例

一、sed (Stream Editor)

1、定位行:

sed -n '12,~3p' pass #从第12行开始,直到下一个3的倍数行(12-15行)

sed -n '12,+4p' pass #从第12行开始,连续4行(12-16行)

sed -n '12~3p' pass #从第12行开始,间隔3行输出一次(12,15,18,21...)


阅读全文...

sed跨行匹配

跨行匹配在sed里算不上是个难点,但绝对能考验一个人的sed基础……

首先明确一下几个概念:
b label
Branch to label; if label is omitted, branch to end of script.
h H    Copy/append pattern space to hold space.
g G    Copy/append hold space to pattern space.
D      Delete  up  to  the  first embedded newline in the pattern space.  Start next cycle, but skip
reading from the input if there is still data in the pattern space.
n N    Read/append the next line of input into the pattern space.


阅读全文...

dos2unix和unix2dos

dos2unix, unix2dos 用来实现 DOS <=> UNIX text file 转换

aptitude install sysutils

行末:

DOS 格式 0d 0a

UNIX 格式 0a

可用功能相同的指令組合

dos2unix:

sed -i'' "s/ //" file

cat file | col -b > newfile

cat file | tr -d " " > newfile


阅读全文...