参考:http://blog.csdn.net/hello_hwc/article/details/40118129
一个比较有趣的例子
如何替换\n也就是把所有的行都归为一行
第一种方式
[popexizhi:
a - 追加
N - Next
$! - 只有最后一行不执行后面的命令,其他的都执行(这里可以指定行数例如2,3但要求存在此行否则整个命令就执行失败了)
':a;N;3!ba;s/\n/ /g' 就是指对1,3执行这个替换
(http://coolshell.cn/articles/9104.html
: --- : label 建立 script file 内指令互相参考的位置
b - b label 将执行的指令跳至由 : 建立的参考位置
(http://blog.csdn.net/zg_hover/article/details/1804481)
这样 ':a;N;$!ba;s/\n/ /g' 可以解释为:
增加标签a,把下一行读入缓冲区,一直读到最后一行-1,跳转到标签a的位置执行s/\n/ /g
所以这里的a可以起任何名字不影响,例如':d;N;$!bd;s/\n/ /g'
hexu共享了另一个sed 脚本也很不错,共享一下
1 {
h
}
2,${
H
}
${
x
s/\n/|/g
}
]
一个比较有趣的例子
如何替换\n也就是把所有的行都归为一行
第一种方式
[popexizhi:
a - 追加
N - Next
N
读取下一行的内容并且将这些内容附加到 pattern space 当前的内容后面 (http://blog.khotyn.com/blog/2013/07/30/sed-part-two/)$! - 只有最后一行不执行后面的命令,其他的都执行(这里可以指定行数例如2,3但要求存在此行否则整个命令就执行失败了)
':a;N;3!ba;s/\n/ /g' 就是指对1,3执行这个替换
(http://coolshell.cn/articles/9104.html
第二个示例,反序了一个文件的行:
1
2
3
4
| $ sed '1!G;h;$!d' t.txt three two one |
其中的 ‘1!G;h;$!d’ 可拆解为三个命令
- 1!G —— 只有第一行不执行G命令,将hold space中的内容append回到pattern space
- h —— 第一行都执行h命令,将pattern space中的内容拷贝到hold space中
- $!d —— 除了最后一行不执行d命令,其它行都执行d命令,删除当前行
: --- : label 建立 script file 内指令互相参考的位置
b - b label 将执行的指令跳至由 : 建立的参考位置
(http://blog.csdn.net/zg_hover/article/details/1804481)
这样 ':a;N;$!ba;s/\n/ /g' 可以解释为:
增加标签a,把下一行读入缓冲区,一直读到最后一行-1,跳转到标签a的位置执行s/\n/ /g
所以这里的a可以起任何名字不影响,例如':d;N;$!bd;s/\n/ /g'
hexu共享了另一个sed 脚本也很不错,共享一下
1 {
h
}
2,${
H
}
${
x
s/\n/|/g
}
]
第二种方式
没有评论:
发表评论