sed 学习笔记
时间:2010-07-27 来源:wwwmewww
本文全部参考于 RHEL饭醉团伙制作的无码高清版 sed & awk 修订第三版
sed脚本应用
1.对同一文件的多重编辑
2.改变一组文件
3.提取文件的内容
4.编辑工作转移 sed命令语法
sed [options] [line/address/list]command/pattern/replacement/flags inputfile / #-- 界定符
! #-- 如果包括界定符,可以用!界定符。例:s!/etc/!/home/!g [options]
-n #-- 不输出内容
-e #-- 引用命令的,允许sed同时运用多个命令
-f #-- 引用sed脚本文件 [line/address/list]
n #-- n为数字,表示第几行
address #-- 正则表达式
address1,address2 #-- 正则表达式,表示address1到address2之间的范围 [command]
格式 #-- [line/address/list]command/pattern/replacement/ a #-- 追加 "$a\hello",在结尾处添加“hello”
c #-- 更改 "[address]c\hello",在第一行前插入“hello”行
i #-- 插入 "1i\hello",在第一行前插入“hello”行 s #-- 替换 "2s/pattern/replacement/",把replacement替换成pattern
y #-- 转换 "y/abc/ABC/",把abc转换成ABC
l #-- 显示看不见的字符,"l" 格式 #-- [line/address/list]command p #-- 打印匹配的内容
= #-- 打印行号 n #-- next 读取下一行,[address]n
d #-- 删除,匹配的当前行;例:“/^$/d”删除空行
h #-- hold,把匹配模式(pattern space)中的内容保留到保留模式(hold space)中
g #-- get,把保留模式(hold space)中的内容提取到匹配模式(pattern space)中
x #-- exchange,把保留模式(hold space)中的内容与匹配模式(pattern space)中内容互换 q #-- 退出,[line/address]q;跟c/c++的break差不多
r #-- 读取文件,[line/address]r file;最多打开10个
w #-- 写入文件, [address]w file (Branch分支) #-- 格式 [address]b[label];label=":mylabel",mylabel=最多7个字符
b #-- 如果匹配-跳转到标签(b mylabel);如果没写标签(b)的话,直接跳转到脚本底部。
(测试命令) #-- 格式 [address]t[label]
t #-- 如果匹配并替换-跳转到标签(t mylabel);如果没写标签(t)的话,直接跳转到脚本底部。 (多行模式)
N #-- Next,追加下一行;最后一行没有下一行,避免错误用"$!N"
D #-- Delete,多行删除,其实就是删除2行,需要跟N配合
H #-- Hold,把匹配模式(pattern space)中的内容(2行)保留到保留模式(hold space)中
G #-- Get,把保留模式(hold space)中的内容全部(顶部多个换行符\n)提取到匹配模式(pattern space)中
P #-- Print,打印多行,把2行打印成一行,需要跟N配合 [pattern] #-- 用正则表达式表示
\(word\) #-- word 被标记为\n,n为数字最多9个,参考例2
\n #-- 换行符 [replacement] #-- 用正则表达式表示
& #-- 引用“pattern”,参考例1
\n #-- 引用“\(word\)”标记的word,n为数字,参考例2
\ #-- 编写多行的replacement进行替换,参考例3 例1:原文:“aa bb cc”
sed命令:sed 's/bb/dd & ee/'
结果:“aa dd bb ee cc” 例2:原文:“aa bb cc”
sed命令:sed 's/\(aa\) bb \(cc\)/\2 \1/'
结果:“cc bb aa” 例3:原文:“abcde”;
sed命令:“sed 's/c/\
/”
结果:
“ab
de”
[flags]
n #-- 数字,匹配第n个匹配,默认为1
g #-- 应用到全局,如果没有g,则对应每行第一个匹配
p #-- 打印匹配的内容
W #-- 把结果输出到文件
sed脚本 -- 就是sed命令的集合
用 -f 来引用脚本 #n #-- sed脚本头一行为“#n”的话,按 -n 处理。
分组命令 -- 使用大括号"{}"将一个地址嵌套在另一个地址中,或者在相同的地址上应用多个命令。 [line/address/list]{ #-- {必须在行末,后面不许有空格。
“sed命令集合”
} #-- 必须以“}”为一行代表一个分组命令结束,一个sed脚本中可以有多个分组命令 刚学完sed,小小整理一下;等掌握了sed 后再发些使用心得。未完待续
1.对同一文件的多重编辑
2.改变一组文件
3.提取文件的内容
4.编辑工作转移 sed命令语法
sed [options] [line/address/list]command/pattern/replacement/flags inputfile / #-- 界定符
! #-- 如果包括界定符,可以用!界定符。例:s!/etc/!/home/!g [options]
-n #-- 不输出内容
-e #-- 引用命令的,允许sed同时运用多个命令
-f #-- 引用sed脚本文件 [line/address/list]
n #-- n为数字,表示第几行
address #-- 正则表达式
address1,address2 #-- 正则表达式,表示address1到address2之间的范围 [command]
格式 #-- [line/address/list]command/pattern/replacement/ a #-- 追加 "$a\hello",在结尾处添加“hello”
c #-- 更改 "[address]c\hello",在第一行前插入“hello”行
i #-- 插入 "1i\hello",在第一行前插入“hello”行 s #-- 替换 "2s/pattern/replacement/",把replacement替换成pattern
y #-- 转换 "y/abc/ABC/",把abc转换成ABC
l #-- 显示看不见的字符,"l" 格式 #-- [line/address/list]command p #-- 打印匹配的内容
= #-- 打印行号 n #-- next 读取下一行,[address]n
d #-- 删除,匹配的当前行;例:“/^$/d”删除空行
h #-- hold,把匹配模式(pattern space)中的内容保留到保留模式(hold space)中
g #-- get,把保留模式(hold space)中的内容提取到匹配模式(pattern space)中
x #-- exchange,把保留模式(hold space)中的内容与匹配模式(pattern space)中内容互换 q #-- 退出,[line/address]q;跟c/c++的break差不多
r #-- 读取文件,[line/address]r file;最多打开10个
w #-- 写入文件, [address]w file (Branch分支) #-- 格式 [address]b[label];label=":mylabel",mylabel=最多7个字符
b #-- 如果匹配-跳转到标签(b mylabel);如果没写标签(b)的话,直接跳转到脚本底部。
(测试命令) #-- 格式 [address]t[label]
t #-- 如果匹配并替换-跳转到标签(t mylabel);如果没写标签(t)的话,直接跳转到脚本底部。 (多行模式)
N #-- Next,追加下一行;最后一行没有下一行,避免错误用"$!N"
D #-- Delete,多行删除,其实就是删除2行,需要跟N配合
H #-- Hold,把匹配模式(pattern space)中的内容(2行)保留到保留模式(hold space)中
G #-- Get,把保留模式(hold space)中的内容全部(顶部多个换行符\n)提取到匹配模式(pattern space)中
P #-- Print,打印多行,把2行打印成一行,需要跟N配合 [pattern] #-- 用正则表达式表示
\(word\) #-- word 被标记为\n,n为数字最多9个,参考例2
\n #-- 换行符 [replacement] #-- 用正则表达式表示
& #-- 引用“pattern”,参考例1
\n #-- 引用“\(word\)”标记的word,n为数字,参考例2
\ #-- 编写多行的replacement进行替换,参考例3 例1:原文:“aa bb cc”
sed命令:sed 's/bb/dd & ee/'
结果:“aa dd bb ee cc” 例2:原文:“aa bb cc”
sed命令:sed 's/\(aa\) bb \(cc\)/\2 \1/'
结果:“cc bb aa” 例3:原文:“abcde”;
sed命令:“sed 's/c/\
/”
结果:
“ab
de”
[flags]
n #-- 数字,匹配第n个匹配,默认为1
g #-- 应用到全局,如果没有g,则对应每行第一个匹配
p #-- 打印匹配的内容
W #-- 把结果输出到文件
sed脚本 -- 就是sed命令的集合
用 -f 来引用脚本 #n #-- sed脚本头一行为“#n”的话,按 -n 处理。
分组命令 -- 使用大括号"{}"将一个地址嵌套在另一个地址中,或者在相同的地址上应用多个命令。 [line/address/list]{ #-- {必须在行末,后面不许有空格。
“sed命令集合”
} #-- 必须以“}”为一行代表一个分组命令结束,一个sed脚本中可以有多个分组命令 刚学完sed,小小整理一下;等掌握了sed 后再发些使用心得。未完待续
相关阅读 更多 +