awk&&sed脚本语言
2009-02-23 20:55
337 查看
sed操作符举例
sed操作符举例
1、把文件中所有的空行删除
#!/bin/bash
sed -e /^$/d "$1" file.txt
=sed -e '/^$/d' file.txt
exit 0
-e:表示后边跟着的是"编辑"命令(可选) edit
^:表示行首
$:表示行尾
d:删除命令 delete
"$1":将命令行参数引用起来,表示可以在文件名中使用空白字符或特殊字符
2、将一个文件中的某个字符串(或匹配模式), 替换为另一个字符串(或匹配模式)
sed -e "s/$old_pattern/$new_pattern/g" $file_name
s: substitution替换
"g", 即全局标志, 用来自动替换掉每行中
3、写日志文件
echo "`date` + `whoami` + $OPERATION "$@"" >> $file_name
$OPERATION: 在操作执行之前, 记录到日志文件中
4、打印ASCII码的字符表
#!/bin/bash
# pr-ascii.sh: 打印ASCII码的字符表.
START=33 # 可打印的ASCII字符的范围(十进制).
END=125
echo " Decimal Hex Character" # 表头.
echo " ------- --- ---------"
for ((i=START; i<=END; i++))
do
echo $i | awk '{printf(" %3d %2x %c/n", $1, $1, $1)}'
# 在这种上下文中, 不会运行Bash内建的printf命令:
# printf "%c" "$i"
done
exit 0
1、# 将原来的所有空行删除并在每一行后面增加一空行。
# 这样在输出的文本中每一行后面将有且只有一空行。
sed '/^$/d;G'
2、#删除所有偶数行
sed 'n;d'
3、# 在匹配式样“regex”的行之前和之后各插入一空行
sed '/regex/{x;p;x;G;}'
4、# 在匹配式样“regex”的行之前和之后各插入一空行
sed '/regex/{x;p;x;G;}'
# 为文件中的每一行进行编号(简单的左对齐方式)。这里使用了“制表符”
# (tab,见本文末尾关于'/t'的用法的描述)而不是空格来对齐边缘。
sed = filename | sed 'N;s//n//t/'
# 对文件中的所有行编号(行号在左,文字右端对齐)。
sed = filename | sed 'N; s/^/ /; s/ */(./{6,/}/)/n//1 /'
# 对文件中的所有行编号,但只显示非空白行的行号。
sed '/./=' filename | sed '/./N; s//n/ /'
# 计算行数 (模拟 "wc -l")
sed -n '$='
# 只在行中出现字串“baz”的情况下将“foo”替换成“bar”
sed '/baz/s/foo/bar/g'
# 将“foo”替换成“bar”,并且只在行中未出现字串“baz”的情况下替换
sed '/baz/!s/foo/bar/g'
其它
1、将myfile.txt中所有内容abc -> ABC
sed -e 's/abc/ABC/g' myfile.txt:
sed -e 's:/abc:ABC:g' myfile.txt
2、指定行数内进行此操作:
sed -e '1,10s/abc/ABC/g' myfile.txt
只在第一到第十行(包括这两行)
3、 <b>This</b> is what <b>I</b> meant.
sed -e 's/<.*>//g' myfile.html ->meant.
sed -e 's/<[^>]*>//g' myfile.html ->This is what I meant.
'[^>]' 指定“非 '>'”字符,其后的 '*' 完成该表达式以表示“零或多个非 '>' 字符”。
4、[a-z] [A-Z]
5、假设您正在回复一条消息。下例将在每一行前面加上短语 "ralph said: ":
sed -e 's/.*/ralph said: &/' origmsg.txt
输出如下:
ralph said: Hiya Jim, ralph said: ralph said:
I sure like this sed stuff! ralph said:
6、删除以#开头的内容
sed -e /^#/d myfile.txt
输出文件中的 main() 函数
sed -n -e '/main[[:space:]]*(/,/^}/p' file.txt
sed -n -e '/main[ -V]*(/,/^}/p' file.txt
反转行
sed -e '1!G;h;$!d' forward.txt > backward.txt
解释:
'G' 命令将只应用第一行。然而,还有一个 '!' 字符 -- 该 '!' 字符 忽略该地址,即,'G' 命令将应用到除第一行之外的 所有行。
如果命令是 '$d',则将只把 'd' 命令应用到文件中的最后一行('$' 地址是指定最后一行的简单方式)。然而,有了 '!' 之后,'$!d' 将把 'd' 命令应用到除最后一行之外的 所有行。
7、基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),而 UNIX 文本只有一个换行。
UNIX 文本移至 Windows 系统
sed -e 's/$//r/' myunix.txt > mydos.txt
DOS/Windows 格式的文本转换成可信赖的UNIX 格式
sed -e 's/.$//' mydos.txt > myunix.txt
10、脚本语言:
change.sh: sed -e 's//(.*/) /(.*/) /(.*/)/Victor /1-/2 Von /3/' myfile.txt
myfile.txt: foo bar oni eeny meeny miny larry curly moe jimmy the weasel
执行: ./change.sh
输出: Victor foo bar oni eeny meeny miny larry curly moe jimmy the weasel- Von
引用:
http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/wrapper.html#EX3
http://sed.sourceforge.net/sed1line_zh-CN.html
http://www.ibm.com/developerworks/cn/linux/shell/sed/sed-1/
sed操作符举例
表示法 | 效果 |
8d | 删除输入的第8行. |
/^$/d | 删除所有空行. |
1,/^$/d | 从输入的开头一直删除到第1个空行(第一个空行也删除掉). |
/Jones/p | 只打印那些包含"Jones"的行(使用-n选项). |
s/Windows/Linux/ | 在每个输入行中, 将第一个出现的"Windows"实例替换为"Linux". |
s/BSOD/stability/g | 在每个输入行中, 将所有"BSOD"都替换为"stability". |
s/ *$// | 删除掉每行结尾的所有空格. |
s/00*/0/g | 将所有连续出现的0都压缩成单个的0. |
/GUI/d | 删除掉所有包含"GUI"的行. |
s/GUI//g | 将所有"GUI"都删除掉, 并保持剩余部分的完整性. |
#!/bin/bash
sed -e /^$/d "$1" file.txt
=sed -e '/^$/d' file.txt
exit 0
-e:表示后边跟着的是"编辑"命令(可选) edit
^:表示行首
$:表示行尾
d:删除命令 delete
"$1":将命令行参数引用起来,表示可以在文件名中使用空白字符或特殊字符
2、将一个文件中的某个字符串(或匹配模式), 替换为另一个字符串(或匹配模式)
sed -e "s/$old_pattern/$new_pattern/g" $file_name
s: substitution替换
"g", 即全局标志, 用来自动替换掉每行中
3、写日志文件
echo "`date` + `whoami` + $OPERATION "$@"" >> $file_name
$OPERATION: 在操作执行之前, 记录到日志文件中
4、打印ASCII码的字符表
#!/bin/bash
# pr-ascii.sh: 打印ASCII码的字符表.
START=33 # 可打印的ASCII字符的范围(十进制).
END=125
echo " Decimal Hex Character" # 表头.
echo " ------- --- ---------"
for ((i=START; i<=END; i++))
do
echo $i | awk '{printf(" %3d %2x %c/n", $1, $1, $1)}'
# 在这种上下文中, 不会运行Bash内建的printf命令:
# printf "%c" "$i"
done
exit 0
1、# 将原来的所有空行删除并在每一行后面增加一空行。
# 这样在输出的文本中每一行后面将有且只有一空行。
sed '/^$/d;G'
2、#删除所有偶数行
sed 'n;d'
3、# 在匹配式样“regex”的行之前和之后各插入一空行
sed '/regex/{x;p;x;G;}'
4、# 在匹配式样“regex”的行之前和之后各插入一空行
sed '/regex/{x;p;x;G;}'
# 为文件中的每一行进行编号(简单的左对齐方式)。这里使用了“制表符”
# (tab,见本文末尾关于'/t'的用法的描述)而不是空格来对齐边缘。
sed = filename | sed 'N;s//n//t/'
# 对文件中的所有行编号(行号在左,文字右端对齐)。
sed = filename | sed 'N; s/^/ /; s/ */(./{6,/}/)/n//1 /'
# 对文件中的所有行编号,但只显示非空白行的行号。
sed '/./=' filename | sed '/./N; s//n/ /'
# 计算行数 (模拟 "wc -l")
sed -n '$='
# 只在行中出现字串“baz”的情况下将“foo”替换成“bar”
sed '/baz/s/foo/bar/g'
# 将“foo”替换成“bar”,并且只在行中未出现字串“baz”的情况下替换
sed '/baz/!s/foo/bar/g'
其它
1、将myfile.txt中所有内容abc -> ABC
sed -e 's/abc/ABC/g' myfile.txt:
sed -e 's:/abc:ABC:g' myfile.txt
2、指定行数内进行此操作:
sed -e '1,10s/abc/ABC/g' myfile.txt
只在第一到第十行(包括这两行)
3、 <b>This</b> is what <b>I</b> meant.
sed -e 's/<.*>//g' myfile.html ->meant.
sed -e 's/<[^>]*>//g' myfile.html ->This is what I meant.
'[^>]' 指定“非 '>'”字符,其后的 '*' 完成该表达式以表示“零或多个非 '>' 字符”。
4、[a-z] [A-Z]
5、假设您正在回复一条消息。下例将在每一行前面加上短语 "ralph said: ":
sed -e 's/.*/ralph said: &/' origmsg.txt
输出如下:
ralph said: Hiya Jim, ralph said: ralph said:
I sure like this sed stuff! ralph said:
6、删除以#开头的内容
sed -e /^#/d myfile.txt
输出文件中的 main() 函数
sed -n -e '/main[[:space:]]*(/,/^}/p' file.txt
sed -n -e '/main[ -V]*(/,/^}/p' file.txt
反转行
sed -e '1!G;h;$!d' forward.txt > backward.txt
解释:
'G' 命令将只应用第一行。然而,还有一个 '!' 字符 -- 该 '!' 字符 忽略该地址,即,'G' 命令将应用到除第一行之外的 所有行。
如果命令是 '$d',则将只把 'd' 命令应用到文件中的最后一行('$' 地址是指定最后一行的简单方式)。然而,有了 '!' 之后,'$!d' 将把 'd' 命令应用到除最后一行之外的 所有行。
7、基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),而 UNIX 文本只有一个换行。
UNIX 文本移至 Windows 系统
sed -e 's/$//r/' myunix.txt > mydos.txt
DOS/Windows 格式的文本转换成可信赖的UNIX 格式
sed -e 's/.$//' mydos.txt > myunix.txt
10、脚本语言:
change.sh: sed -e 's//(.*/) /(.*/) /(.*/)/Victor /1-/2 Von /3/' myfile.txt
myfile.txt: foo bar oni eeny meeny miny larry curly moe jimmy the weasel
执行: ./change.sh
输出: Victor foo bar oni eeny meeny miny larry curly moe jimmy the weasel- Von
引用:
http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/wrapper.html#EX3
http://sed.sourceforge.net/sed1line_zh-CN.html
http://www.ibm.com/developerworks/cn/linux/shell/sed/sed-1/
相关文章推荐
- Perl像C一样强大,像awk、sed等脚本描述语言一样方便。
- Linux基本功十三:shell脚本Sed & Awk 及软件的安装
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
- sed && awk工具 及一些常用的shell脚本
- sed & awk单行脚本快速参考
- awk&sed日常用法记录
- awk & sed 入门
- linux终极命令 之 强大的脚本语言awk
- Shell脚本的学习&&sed
- WPF/Silverlight深度解决方案:(十一)与嵌入式脚本语言Lua & JavaScript的交互(下)
- shell脚本---grep、awk、sed工具
- 《SED 单行脚本快速参考》的 awk 实现
- 编译型语言&解释型语言&混合型语言&脚本语言
- Sed&awk笔记之awk篇
- 《SED 单行脚本快速参考》的 awk 实现
- Linux学习--第十一天--source、环境变量目录、欢迎信息、正则、cut、awk、sed、sort、判断表达式、if、for、case、一些脚本
- awk && sed
- sed&amp;awk 第三版笔记
- 听说awk语言也可以编写脚本
- 脚本学习之路之----我要熟悉awk, sed, rpm 工具