没有合适的资源?快使用搜索试试~ 我知道了~
详细介绍awk和sek的用法和技巧,并有例子实际说明。
资源推荐
资源详情
资源评论
文本间隔:
# 在每一行后面增加一空行
sed G
awk '{printf("%s",$0)}'
# 将原来的所有空行删除并在每一行后面增加一空行。
# 这样在输出的文本中每一行后面将有且只有一空行。
sed '/^$/d;G'
awk '!/^$/{printf("%s",$0)}'
# 在每一行后面增加两行空行
sed 'G;G'
awk '{printf("%s",$0)}'
# 将第一个脚本所产生的所有空行删除(即删除所有偶数行)
sed 'n;d'
awk '{f=!f;if(f)print $0}'
# 在匹配式样“regex”的行之前插入一空行
sed '/regex/{x;p;x;}'
awk '{if(/regex/)printf("\n%s",$0);else print $0}'
# 在匹配式样“regex”的行之后插入一空行
sed '/regex/G'
awk '{if(/regex/)printf("%s",$0);else print $0}'
# 在匹配式样“regex”的行之前和之后各插入一空行
sed '/regex/{x;p;x;G;}'
awk '{if(/regex/)printf("\n%s",$0);else print $0}'
编号:
# 为文件中的每一行进行编号(简单的左对齐方式)。这里使用了“制表符”
# (tab,见本文末尾关于’ ’的用法的描述)而不是空格来对齐边缘。
sed = filename | sed 'N;s//\t/'
awk '{i++;printf("%d\t%s",i,$0)}'
# 对文件中的所有行编号(行号在左,文字右端对齐)。
sed = filename | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /'
awk '{i++;printf("%6d %s\n",i,$0)}'
# 对文件中的所有行编号,但只显示非空白行的行号。
sed '/./=' filename | sed '/./N; s/\n/ /'
awk '{i++;if(!/^$/)printf("%d %s\n",i,$0);else print}'
# 计算行数 (模拟 “wc -l”)
sed -n '$='
awk '{i++}END{print i}'
文本转换和替代:
# Unix 环境:转换 DOS 的新行符(CR/LF)为 Unix 格式。
sed 's/.$//' # 假设所有行以 CR/LF 结束
sed 's/^M$//' # 在 bash/tcsh 中,将按 Ctrl-M 改为按 Ctrl-V
sed 's/\x0D$//' # ssed、gsed 3.02.80,及更高版本
awk '{sub(/\x0D$/,"");print $0}'
# Unix 环境:转换 Unix 的新行符(LF)为 DOS 格式。
sed "s/$/`echo -e \\\r`/" # 在 ksh 下所使用的命令
sed 's/$'"/`echo \\\r`/" # 在 bash 下所使用的命令
sed "s/$/`echo \\\r`/" # 在 zsh 下所使用的命令
sed 's/$/\r/' # gsed 3.02.80 及更高版本
awk '{printf("%s\r\n",$0)}'
# DOS 环境:转换 Unix 新行符(LF)为 DOS 格式。
sed "s/$//" # 方法 1
sed -n p # 方法 2
DOS 环境的略过
# DOS 环境:转换 DOS 新行符(CR/LF)为 Unix 格式。
# 下面的脚本只对 UnxUtils sed 4.0.7 及更高版本有效。要识别 UnxUtils 版本的
# sed 可以通过其特有的“–text”选项。你可以使用帮助选项(“–help”)看
# 其中有无一个“–text”项以此来判断所使用的是否是 UnxUtils 版本。其它 DOS
# 版本的的 sed 则无法进行这一转换。但可以用“tr”来实现这一转换。
sed "s/\r//" infile >outfile # UnxUtils sed v4.0.7 或更高版本
tr -d \r <infile >outfile # GNU tr 1.22 或更高版本
DOS 环境的略过
# 将每一行前导的“空白字符”(空格,制表符)删除
# 使之左对齐
sed 's/^[ \t]*//' # 见本文末尾关于'\t'用法的描述
awk '{sub(/^[ \t]+/,"");print $0}'
# 将每一行拖尾的“空白字符”(空格,制表符)删除
sed 's/[ \t]*$//' # 见本文末尾关于'\t'用法的描述
awk '{sub(/[ \t]+$/,"");print $0}'
# 将每一行中的前导和拖尾的空白字符删除
sed 's/^[ \t]*//;s/[ \t]*$//'
awk '{sub(/^[ \t]+/,"");sub(/[ \t]+$/,"");print $0}'
# 在每一行开头处插入 5 个空格(使全文向右移动 5 个字符的位置)
sed 's/^/ /'
awk '{printf(" %s\n",$0)}'
# 以 79 个字符为宽度,将所有文本右对齐
# 78 个字符外加最后的一个空格
sed -e :a -e 's/^.\{1,78\}$/ &/;ta'
awk '{printf("%79s\n",$0)}'
# 以 79 个字符为宽度,使所有文本居中。在方法 1 中,为了让文本居中每一行的前
# 头和后头都填充了空格。 在方法 2 中,在居中文本的过程中只在文本的前面填充
# 空格,并且最终这些空格将有一半会被删除。此外每一行的后头并未填充空格。
sed -e :a -e 's/^.\{1,77\}$/ & /;ta' # 方法 1
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\( *\)\1/\1/' # 方法 2
awk '{for(i=0;i<39-length($0)/2;i++)printf(" ");printf("%s\n",$0)}' #相当于上面的方法二
# 在每一行中查找字串“foo”,并将找到的“foo”替换为“bar”
sed 's/foo/bar/' # 只替换每一行中的第一个“foo”字串
sed 's/foo/bar/4' # 只替换每一行中的第四个“foo”字串
sed 's/foo/bar/g' # 将每一行中的所有“foo”都换成“bar”
sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # 替换倒数第二个“foo”
sed 's/\(.*\)foo/\1bar/' # 替换最后一个“foo”
剩余11页未读,继续阅读
资源评论
ylshf18
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功