awk&&sed脚本语言

sed操作符举例

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"都删除掉, 并保持剩余部分的完整性.

 

 

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/

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值