Awk-one-line(3) 十月 14th, 2009

awk 'NR<11'

#打印前十行

awk 'NR>1{exit};1'

awk 'NR<2'

#打印第一行

awk '{y=x"\n"$0;x=$0};END{print y}'

#打印最后两行

awk 'END{print}'

#打印最后一行

awk '/regex/'

#打印匹配行

awk '!/regex/'

#打印不匹配行

awk '$5=="abc123"'

awk '$5!="abc123"'

awk '!($5=="abc123")'

 

awk '$7~/^[a-f]/'

awk '$7 !~/^[a-f]/'

 

awk '/regex/{print x};{x=$0}'

awk '/regex/{print (x==""?"match on line":x)};{x=$0}'

#每行存入x

#读入下一行,如果是匹配行则输出x

#输出匹配行的前一行

 

awk '/regex/{getline;print}'

#getline以后如果下一行匹配,不会输出

 

awk '/AAA/;/BBB/;/CCC/'

awk '/AAA.*BBB.*CCC/'

 

awk 'length>64'

#长度大于64的行

awk 'length<64'

#长度小于64的行

 

awk '/regex/,0'

awk '/regex/,EOF'

#从正则到EOF

 

awk 'NR==8,NR==12'

#指定行

awk 'NR==52'

awk 'NR==52{print;exit}'

 

awk '/Iowa/,/Montana/'

 

awk NF

awk '/./'

删除所有空白行

 

awk 'a!~$0;{a=$0}'

#删除连续的重复行

 

awk '!a[$0]++'

awk '!($0 in a) {a[$0];print}'

#删除重复行

Tags: awk

Posted in *nux | Comments(0)»

Awk-one-line(2) 十月 14th, 2009

awk '{sub(/\r$/,"")};1'

#CR/LF

#CR(Carriage Return, 0×0D)

#LF(Line Feed, 0×0A)

 

awk '{sub(/$/,"\r")};1'

#LF

awk 1

 

awk '{sub(/^[ \t]+/,"")};1'

#删除行前空白

 

awk '{sub(/[ \t]+$/,"")};1'

#删除行后空白

 

awk '{gsub(/^[ \t]+|[ \t]+$/,"")};1'

#删除前后空白

awk '{$1=$1};1'

#删除前后空白#?

 

awk '{sub(/^/,"     ")};1'

#行开头插入5个空格

 

awk '{printf "%79s\n", $0}'

#79字符宽右对齐

 

awk '{l=length();s=int((79-l)/2);printf "%"s+l"s\n",$0}'

#79字符宽中对齐

 

awk '{sub(/foo/,"bar")};1'

#替换第一个

 

gawk '{$0=gensub(/foo/,"bar",4)};1'

#替换第四个

 

awk '{gsub(/foo/,"bar")};1'

#全部替换

 

awk '{!/baz/{gsub(/boo/,"bar")};1'

#在不包含baz的行将foo替换成bar

 

awk '{gsub(/sacrlet|ruby|puce/,"red")};1'

#将scarlet,ruby,puce替换成red

 

awk '{a[i++]=$0};END{for(j=i-1;j>=0;)print a[j--]}'

#tac

#倒序输出行

 

awk '/\\$/{sub(/\\$/,"");getline t;print $0 t;next};1'

#如果一行以\结尾

#将下一行接到此行

#处理2行

 

awk -F ":" '{print $1|"sort"}' /etc/passwd

#排序打印所有用户名

#-F FS(Filed Sperator)

 

awk '{print $2,$1}'

#

 

awk '{temp=$1;$1=$2;$2=temp};1'

 

awk '{$2="";print}'

#删除第二行

 

awk '{for(i=NF;i>0;i--)printf("%s",i);printf("\n")}'

#倒置每一行

 

awk 'ORS=NR%5?",":"\n"'

#ORS输出时数据行分隔符

#用逗号链接每5行

Tags: awk

Posted in *nux | Comments(0)»

Awk-one-line(1) 十月 14th, 2009

######AWK#ONE#LINE#############

awk '1;{print ""}'

#1表示{print} 显示当前行

#每行后面添加一行

 

awk 'BEGIN{ORS="\n\n"};1'

#ORS表示输出时数据行分隔符

#原始为\n设置为\n\n

#同上

 

awk 'NF{print$0 "\n"}'

#NF表示数据个数

#number of fields

#如果为空行则为0不执行后面的语句

 

awk '1;{print "\n"}'

#每行后输出2空行

#-------------------------------------------------

 

awk '{print FNR "\t" $0}' files*

#FNR 同NR 新文件从0开始

#NR awk开始执行之后的行数

#number of records

#打印行号

 

awk '{print NR "\t" $0}' files

awk '{printf("%5d: %s\n", NR, $0)}'

 

awk 'NF{$0=++a ":" $0};{print}'

#a初始化为1

#输出行号,不含空行

 

awk '{print (NF? ++a ":" : "") $0}'

#同上 ?:

 

awk 'END{print NR}'

#结尾输出行号

awk '{s=0;for(i=1;i<NF;i++)s=s+$1;print s}'

#输出每行每个field之和

 

awk '{for(i=1;i<NF;i++)s=s+$i;print s}'

#输出

 

awk '{total=total+NF};END{print total}'

#输出个数

 

awk '/Beth/{n++};END{print n+0}'

#输出包含'Beth'的行的总行数

#没有+0如果无匹配会输出空行

 

awk '{print NR%50?$0:$0 "\n"}'

#每50行输出一空行

 

awk '$1>max{max=$1;maxline=$0};END{print max,maxline}'

#输出第一列最大的行和这个数

 

awk '{print NF ":" $0}'

#输出每行的列数

 

awk '{print $NF}'

#输出最后一列

 

awk '{filed = $NF};END{print filed}'

#输出最后一行的最后一列

 

awk 'NF>4'

#输出大于4列的行

 

awk '$NF>4'

#输出最有一列大于4的行

 

awk 'BEGIN{while(a++<513)s=s" ";print s}'

#输出指定长度的字符串

 

gawk --re-interval 'BEGIN{while(a++<49)s=s" ";{sub{/^.{6}/,"&"s)};1'

#生成49个空格的字符串s

#在每行第6个字符后面插入s

#输出

 

#split{"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec", month, " "}

#for(i=1;i<=12;i++)m_digit[month[i]]=i;

#

#

 

awk 'length>max{max=length;longest=$0};END{print max;print longest}'

#length是每行的字符串长度

#输出最长的行

Tags: awk

Posted in *nux | Comments(0)»

Sed FAQ -iyux-x;D 十月 12th, 2009

1.sed是什么?

流编辑器.流编辑器是什么?以流为对象的编辑器.流是什么?一种数据载体,包括输入和输出.

sed就是过滤器,过滤输入的数据,再输出数据.

2.sed怎么用?

各种命令.

3.sed的语法?

sed指令格式: [addr1[,addr2]]function[argument]

首先要指定地址,再使用操作函数,用参数进行操作

其他的另外说

4.sed地址表示?

去见man

sed的操作是以行为单位的.

first~step 指定开始的行,和间隔的行

/regexp/ 通过正则表达式匹配的行

\cregexpc 同上,c能换成任意字符

$ 最后一行

1,10 第一行到第十行

1,/regexp/ 从第一行到匹配正则表达式的行,非贪婪的

/regexp1/,/regexp2/

addr1,+N 从addr1开始的N行

addr1,~N 从addr1开始到接下来第一个N的整倍数行

地址不是必须的

5.函数?

去见man

6.-e和;?

-e分开写好看些

7.-n?

sed处理完一行/一组命令之后,会把pattern space中的数据输出,-n为不输出

8.pattern space和hold space?

sed读入一行,如果这一行匹配地址,就把这一行放入pattern space进行处理,处理完之后默认是输出并清空pattern space

G,g,x,d,D,N,n能改变.

hold space是一个缓冲区,x,h,H,能改变,

9.需要注意的?

一些产生跳转的命令

 

...

 

n.怎么学sed?

跟学tex一样.见TheTexbook.

 

 

Tags: sed

Posted in *nux | Comments(0)»

Sed-one-line(3) 十月 11th, 2009

sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h

#显示 行号\n前一行\n匹配行\n下一行

#-h保证前一行在匹配行时保存在pattern space中

 

sed '/AAA/!d;/BBB/!d;/CCC/!d'

#包含AAA或BBB或CCC的行

 

sed '/AAA.*BBB.*CCC/!d'

#包含AAA和BBB和CCC的行

 

sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

#包含AAA或BBB或CCC的行

#       b label

#             Branch to label; if label is omitted, branch to end of script.

#如果label被省略,跳转到脚本尾部

 

sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'

#包含AAA的行

#直到空白行,每一行附加到holdspace,然后交换到patternsapce匹配AAA

 

sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'

sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

#包含AAA或BBB或CCC的行

#包含AAA和BBB和CCC的行

 

sed -n '/^.\{65\}/p'

#包含大于等于65个字符的行

 

sed -n '/^.\{65\}/!p'

sed '/^.\{65\}/d'

#小于65个字符的行

 

sed -n '8,12p'

sed '8,12!d'

#显示8-12行

 

sed -n '/regexp/,$p'

#匹配/regexp/的行 到 $最后一行 显示

#显示从匹配正则开始到文本结束

 

sed -n '52p'

sed '52!d'

sed '52q;d'

#显示第52行

 

sed -n '3,${p;n;n;n;n;n;n;}'

sed '3~7!d'

#从第三行开始,每7行显示一次

 

sed -n '/Iowa/,/Montana/p'

#显示包含Iowa的行 到Montana的行 贪婪

 

sed '/Iowa/,/Montana/d'

 

sed '$!N;/^\(.*\)\n\1$/!p;D'

#删除文件中相邻的重复行

#$!N

#/^\(.*\)\n\1$/

#!p;D

 

sed -n 'G;s/\n/&&/;/^\([ -~]*\n\).*\n\1/d;s/\n//;h;P'

#删除文件中的重复行

#当心缓存

#不同行都缓存在holdspace

 

sed '$!N;s/^\(.*\)\n\1$/\1/;t;D'

#     t label

#              If  a  s///  has  done  a successful substitution since the last

#              input line was read and since the last  t  or  T  command,  then

#              branch to label; if label is omitted, branch to end of script.

#保留相邻重复行

 

sed '1,10d'

#删除前十行

 

sed 'N;$!P;$!D;$d'

#删除最后2行

 

sed -e :a -e '$d;N;2,10ba' -e 'p;D'

sed -n -e :a -e '1,10!{p;N;D;};N;ba'

#删除最后十行

#(1)

#(2)

 

sed 'n;n;n;n;n;n;n;d'

#删除8倍数行

 

sed '/pattern/d'

#删除匹配行

 

sed '/^$/d'

sed '/./!d'

#删除空行

 

sed '/./,/^$/!d'

sed '/^$/N;/\n$/D'

#cat -s

#多空行变一行,头尾空行删除

#(1)结尾可有一空行

#(2)开头可以有一空行

 

sed '/^$/N;/\n$/N;//D'

#       D      Delete up to the first embedded newline in  the  pattern  space.

#              Start  next  cycle,  but skip reading from the input if there is

#              still data in the pattern space.

#保留多个空行的前两行

 

sed '/./,$!d'

#删除文件头的空行

 

sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'

sed -e :a -e '/^\n*$/N;/\n$/ba'

#ditto 同上

#删除文件末尾的空行

#(2)无用

#(1) ????????????????????

 

sed -n '/^$/{p;h;};/./{x;/./p;}'

#删除每段的最后一行

# 若一段为 A\nB\nC\n\nD

# 读入B 交换patternspace = * holdspace = B

# 读入C 交换patternspace = B holdspace = C 输出B

# 读入空行 输出空行 patternspace = * holdspace = *

# 读入D 继续

 

sed "s/.`echo \\\b`/g"

sed 's/.^H//g'

sed 's/.\x08//g'

 

sed '/^$/q'

#空行之前

 

 

sed '/^Subject: */!d;s///;q'

#??

 

sed '/^Reply-To: /q;/^Form:/h;/./d;g;q'

#回复地址

 

sed 's/ *(.*)//;s/>.*//;s/.*[:<]*//'

#邮件地址

 

sed 's/^/> /'

#加>

 

sed 's/> //'

#删>

 

sed -e :a -e 's/<[^>]*>//g;/</N;//ba'

#移除大部分HTML标签

 

sed '/./{H;d;};x;s/\n/={NL}=/g' filename|sort|sed '/s/={NL}=//;s/={NL}=/\n/g'

Tags: sed

Posted in *nux | Comments(0)»

Sed-one-line(2) 十月 11th, 2009

sed 's/foo/bar/'
#
sed 's/foo/bar/4'
sed 's/foo/bar/g'

sed 's/\(.*\)foo\(.*foo\)/\1bar\2/'
#替换倒数第二个
sed 's/\(.*\)foo/\1bar/'
#替换倒数第一个

sed '/baz/s/foo/bar/g'
sed '/baz/!s/foo/bar/g'

sed 's/scarlet/red/g;s/ruby/red/;s/puce/red/g'

sed '1!G;h;$!d'
#G 添加holdspace到pattern space;第一行不添加
#h 将patternsapce复制到hold space;
#最后一行不删除
#
#第一行添加到holdspace,第二行将holdspace添加到patternspace,再复制到holdspace直到最后一行.
#tac,逆序打印每一行

sed -n '1!G;h;$p'
#同上,最后打印最后一行,

sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
#??????????????????????????

sed '$!N;s/\n\ /'
#最后一行不继续读
#两行合并成一行空格隔开

sed -e :a -e '/\\$/N;s/\\\n//;ta'
#\\转义为\,如果一行以\结尾,读入下一行到pattern spacee
#删除\和\n,重复
#将以\结尾的行和下一行合并

sed -e :a -e '$!N;s/\n=/ /;ta' -e 'p;D'
#将以=开头的行和上一行合并
#D删除patternspace的第一行
#sed中循环碰到不匹配的行停止

sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'
#每次匹配数字和3个数字添加,

sed 'n;n;n;n;G;'
#每5行增加一行
sed '51~50/G'
#从51行开始每50行增加一行


sed 10q
#q  退出sed
#到第10行退出sed;显示前10行

sed q
#显示第一行

sed -e :a -e '$q;N;11,$D;ba'
#显示最后10行


sed '$!N;$!D'
#到倒数第二行时读入最后一行匹配不删除
#显示最后两行

sed '$!d'
sed -n '$p'
#输出最后一行

sed -e '$!{h;d;}' -e x
sed -e '1{$q;}' -e '$!{h;d;}' -e x
sed -e '1{$d;}' -e '$!{h;d;}' -e x
#显示倒数第二行
#(1)保存一行到holdspace,删除patternspace直到最后一行,交换

sed -n '/regexp/p'
sed '/regexp/!d'
#显示匹配行

sed -n 'regexp/!p'
sed '/regexp/d'
#不显示匹配行

sed -n '/regexp/{g;1!p;};h'
sed -n '/regexp/{n;p;}'
#显示匹配行的上一行/下一行
#(1)h保证了每一行进入holdspace

Tags: sed

Posted in *nux | Comments(0)»

Sed-one-line(1) 十月 11th, 2009

sed G
#G是append Hold Space到Pattern Space,Hold Space默认为空,每行后输出一空行
sed '/^$/d;G'
#^$匹配空行,d删除;删除所有空行,在每一行后输出一空行
sed 'G;G'
#输出两空行
sed 'n;d'
#n读入下一行到Pattern Space,并删除;删除所有偶数行
sed '/regex/{x;p;x;}'
#在匹配行,x交换hold space和pattern space,p输出;在匹配行之前插入空行
sed '/regex/G'
#;在匹配行之后插入空行

sed = filename | sed 'N;s/\n/\t/'
#= 在每行之前输出一行行号;
#N添加下一行到pattern space;把换行符替换成tab
sed读入到pattern space的行不包括\n,使用N读入包含\n
#给每一行编号,tab分隔 行号和内容

sed = filename | sed 'N;s/^/      /;s/ *\(.\{6,\}\)\n/\1 /'
#给文件编号,读入下一行,每一行头替换为    (6个空格)
#替换空格(0次)+字符+ \n为字符+空格    
#编号,编号右对齐

sed '/./=' filename | sed '/./N;s/\n/ /'
#匹配非空行编号, 匹配非空行读入下一行替换;空行还是占行号
sed -n '$='
#输入最后一行行号;计算行数
#=在pattern space生成行号;
#-n 不输出原文件

sed 's/.$//'
sed 's/^M$//'
sed 's/\x0D$//'
sed "s/$/`echo -e \\\r`/"
sed 's$'"/`echo  \\\r`/"
sed "s/$/`echo \\\r`/"
sed 's/$/\r/'

sed 's/^[ \t]*//'
#替换每一行之前的空白(空格和\t)
sed 's/[ \t]*$//'
#替换每一行之后 的空白
sed 's/^[ \t]*//;s/[ \t]*$//'
#替换每一行前后的空白
sed -e :a -e 's/^.\{1,77\}$/ & /;ta'
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\( *\)\1/\1/'
#: 增加标记 :a标记名为a
#t 跳转到标记 ta
#& 之前匹配的内容
#(1)重复将行的所有内容前后添加一个空格,行右侧有空格
#(2)将文本右对齐,再把空格折半,行右侧无空格
sed 's/^/      /'
#行首替换成5个空格
sed -e :a -e 's/^.\{1,78\}$/ &/ta'
#右对齐

Tags: sed

Posted in *nux | Comments(0)»