sed和awk简明教程-面试
2015-05-13 20:18
309 查看
sed option script file
option : -e script -f file -n 分别表示从多行script多行输入、文件中获得输入和不要为每条命令生成输出,
等待print来输出。
-n表示不输出原来的问本行
script:
替代:
s/pattern/replacement/flags
flags:
/number如: sed‘s/test/tester/5’file1 表示将file1中的第5处的匹配位置.
/p 表示原来的行也输出
/w file 表示结果输出到file中
/g 表示替代所有已有文本出现的地方.
行寻址:
address command或者
address {
command1
command2
}
(1)数字寻址:address 可以使用单个数字或者num1,num2表示num1和num2行之间的部分.如
sed ‘2,$s/dog/cat’ animal.txt
(2)文本过滤器寻址
/pattern/command
表示只在匹配pattern模式的行执行command命令。
例子:
(1)将/etc/passwd文件中的/bin/bash替换成/bin/csh
sed -p ‘s!/bin/bash!/bin/csh!’ /etc/passwd
删除:d命令
sed ‘d’ data1 #删除data1所有行
sed ‘/1/,/3/d’ data1 #从匹配模式1的地方打开行删除功能,匹配模式2的地方关闭删除行功能.
插入和追加:
i和a命令:格式为:sed ‘[address]command\newline’
注意:插入总在数据流的前面,添加总在数据流的后面。
例子:
cat test |sed ‘$a\fsdf’
修改行:c命令。
sed ‘linenumc\sfafafa’ test
置换命令:y命令-唯一可以处理单个字符的sed编辑命令。
[address]y/inchars/outchars/
sed ‘y/123/789/’data8 将data8中所有的1置换成7 2置换成8 3置换成9
y命令为全局命令,无法控制只替代文档中的指定字符。
一些技巧:
打印命令:p打印文本行,=用于打印行号 l用来列出行
可以使用{}执行多条命令
如:
}`
注意:
sed 使用-i表示直接在文件中修改
sed 只有修改插入(i),添加(a),修改(c)命令式使用’\’作为分割
1 sed ‘s/^/#/’ data
在data每句行首加一个’#’
同理可以在行尾加#
2 sed ‘s!abc>!abd!’ test 表示只替代以abc结尾的abc字符成abd
^ 表示一行的开头。如:/^#/ 以#开头的匹配。
表示一行的结尾。如:/}/ 以}结尾的匹配。
\< 表示词首。 如 \
option : -e script -f file -n 分别表示从多行script多行输入、文件中获得输入和不要为每条命令生成输出,
等待print来输出。
-n表示不输出原来的问本行
script:
替代:
s/pattern/replacement/flags
flags:
/number如: sed‘s/test/tester/5’file1 表示将file1中的第5处的匹配位置.
/p 表示原来的行也输出
/w file 表示结果输出到file中
/g 表示替代所有已有文本出现的地方.
行寻址:
address command或者
address {
command1
command2
}
(1)数字寻址:address 可以使用单个数字或者num1,num2表示num1和num2行之间的部分.如
sed ‘2,$s/dog/cat’ animal.txt
(2)文本过滤器寻址
/pattern/command
表示只在匹配pattern模式的行执行command命令。
例子:
(1)将/etc/passwd文件中的/bin/bash替换成/bin/csh
sed -p ‘s!/bin/bash!/bin/csh!’ /etc/passwd
删除:d命令
sed ‘d’ data1 #删除data1所有行
sed ‘/1/,/3/d’ data1 #从匹配模式1的地方打开行删除功能,匹配模式2的地方关闭删除行功能.
插入和追加:
i和a命令:格式为:sed ‘[address]command\newline’
注意:插入总在数据流的前面,添加总在数据流的后面。
例子:
cat test |sed ‘$a\fsdf’
修改行:c命令。
sed ‘linenumc\sfafafa’ test
置换命令:y命令-唯一可以处理单个字符的sed编辑命令。
[address]y/inchars/outchars/
sed ‘y/123/789/’data8 将data8中所有的1置换成7 2置换成8 3置换成9
y命令为全局命令,无法控制只替代文档中的指定字符。
一些技巧:
打印命令:p打印文本行,=用于打印行号 l用来列出行
可以使用{}执行多条命令
如:
`sed -n ‘/num1/{
p}`
注意:
sed 使用-i表示直接在文件中修改
sed 只有修改插入(i),添加(a),修改(c)命令式使用’\’作为分割
1 sed ‘s/^/#/’ data
在data每句行首加一个’#’
同理可以在行尾加#
2 sed ‘s!abc>!abd!’ test 表示只替代以abc结尾的abc字符成abd
^ 表示一行的开头。如:/^#/ 以#开头的匹配。
表示一行的结尾。如:/}/ 以}结尾的匹配。
\< 表示词首。 如 \