- 浏览: 311123 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
liuyong19832011:
,赞一个
Java通过BufferedWriter追加内容到文件末尾的几种常用方法 -
justjavac:
总结很好,怎么没人支持呢?最近发现iteye踩贴现象很严重。
shell数组的使用
转载至http://lht821008.blog.163.com/blog/static/416478620110411959705/
#删除每一行开头的空白 (空格,TAB)左对齐排列全文.
sed 's/^[ \t]*//'
### 替换成空,^[ \t]* 的含义为以空格或者TAB键开始的(或者是他们的组合)行.
#从每一行结尾处删除最后的空格(空格,TAB)
sed 's/[ \t]*$//'
#删除每一行的开头和结尾的空格
sed 's/^[ \t]*//;s/[ \t]*$//'
#在每一行开始处插入5个空格(整页偏移)
sed 's/^/ /'
#右对齐,按79列宽排列所有文本
sed -e :a -e 's/^.\{1,78\}$/ &/;ta'
###这个语句好像很麻烦,不过看懂了还挺有意思.:)
###首先出现了几个新东东1.":" 2."&". 3. "-e " 4."t",解释一下
###1.":" Label for b and t commands.(给b和t命令加注标签)
###2."&" 表示重复整个匹配的规则表达式.
###3. "-e" add the script to the commands to be executed
### 把脚本加到命令里用以执行
###如果从读入最后一个输入行并且执行最后一个t或者T命令后,一个s///命令成功替换,
###那么流程分支指向label处,如果label被忽略(就是没有成功替换吧,我想),那么流程
###分支指向脚本结束.
###回过头来看,整个sed命令行是一个循环执行的语句,每一行都要替换(78-当前行的字
###符数)次,所以如果整个文件比较大,或者一行字符数比较少,做这个动作就有点吃力了.
###不信你试试吧,呵呵.
#使所有文本居于79列宽的格式中央。在第一种方法中,每一行开头处的空格是
#很重要的,最后的空格被附在行尾。第二种方法中,一行开头的空格在中心对
#齐的行中被丢弃,行尾也没有原来结尾处的空格。
sed -e :a -e 's/^.\{1,77\}$/ & /;ta' # method 1
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\(*\)1/\1/' # method 2
#在每一行中用"bar" 替换(找并替换)foo"
sed 's/foo/bar/' # replaces only 1st instance in a line
# 在一行中,仅在第一次出现时替换
sed 's/foo/bar/4' # replaces only 4th instance in a line
#在一行中,仅在第四次出现时替换
sed 's/foo/bar/g' # replaces ALL instances in a line
#在一行中替换所有出现的值
###就不直接翻译了,大概意思就是replacement处可以包含&代表匹配的模式空间中
###的部分,特殊的\1-\9可以代表regexp中相应的"子表达式",也就是说前面regexp
###可以分为几个子表达式,而后边 replacement中可以用\1-\9分别代表它们.这样就
###增加了灵活性,便于修改sed命令.
###把regexp中的\去掉后,就变成(.*)foo(*foo),其中(.*)表示零个或者多个字符,
###这样加上后边的\1bar\2就变成了改变倒数第二个foo,而倒数第一个不变
sed 's/\(*\)foo/\1bar/' #只替换最后一个值
#在每一含有"baz"的行中用"bar"替换(查找并替换)foo"
sed '/baz/s/foo/bar/g'
### /baz/用来查找,后边的用来替换
#在每一不含有"baz" 的行中用"bar"替换(找并替换)foo"
sed '/baz/!s/foo/bar/g'
#将"scarlet"或者"ruby"或者"puce"替换成"red"
sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g' # most seds
#反转文章行的顺序(类似"tac" )
sed '1!G;h;$!d' # method 1
sed -n '1!G;h;$p' # method 2
#反转一行中每个字符的顺序(类似"rev")
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
###'/\n/!G'是判断本行是否有换行符,如果没有执行G命令
###'s/\(.\)\(.*\n\)/&\2\1/'命令是在原来行+第二个字符(或者没有)开始到换行符+第一个字符
###//D命令是在模式空间删除第一行,注意执行完成后如果模式空间不为空,继续下一个
###循环执行.
###s/.//命令是删除第一个字符
#把两行合为一行(类似于"paste")
sed '$!N;s/\n/ /'
#如果一行以"\"结束,把下一行加在此行上
sed -e :a -e '/\\$/N; s/\\\n//; ta'
#如果一等号开始某一行,把这一行加到前一行后边,并且用一个空格替换等号
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'
## P命令--Print up to the first embedded newline of the current
###pattern space.打印当前模式空间中第一行。
###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.
###删除当前模式空间中第一行。开始新的循环,但是如果在模式空间中仍然
###有数据,那么跳过读取输入。
#给数字串加逗号,把"1234567"变为"1,234,567"
gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta' # GNU sed
sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' # other seds
###(.*[0-9])表示零个或者多个字符(可能包含数字)+一个数字,而
###([0-9]{3})表示三个数字, 然后不停的替换,直到条件不成立,也就是没有
###四个以上连续的数字出现就停止了.
#给带有小数点和负号的数字的数字加上逗号
gsed ':a;s/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g;ta'
#每五行后加一空行
gsed '0~5G' # GNU sed only
sed 'n;n;n;n;G;' # other seds
#打印一个文件的前10行(模仿动作"head")
sed 10q
#打印一个文件的第一行(仿"head -1")
sed q
### q命令的解释Immediately quit the sed script without processing
###any more input, except that if auto-print is not disabled the
###current pattern space will be printed.
### 所以上边两个命令都清楚了,执行到第10行退出就打印前10行,执行第一行
###就退出就打印第一行
#打印一个文件的后10行(仿"tail")
sed -e :a -e '$q;N;11,$D;ba'
###Label b : Branch to label; if label is omitted, branch to end of script.
###命令D 删除模式空间内第一个 newline 字母 \n 前的资料。
###命令N 把输入的下一行添加到模式空间中。
### b label:分支到脚本中带有标号的地方,如果标号不存就分支到脚本的末尾
#打印一个文件的最后两行(仿"tail -2")
sed '$!N;$!D'
###sed '$!N;$!D' : 对文件倒数第二行以前的行来说,N 将当前行的下一行放到模
###式空间中以后,D 就将模式空间的内容删除了;到倒数第二行的时候,将最后一行
###附加到倒数第二行下面,然后最后一行不执行 D ,所以文件的最后两行都保存下来了。
###不知道是这段话说得有些含糊,还是我理解得有偏差,总觉得D命令解释成
###"将模式空间的内容删除了"有些让人糊涂.
###而我是这样理解的,不知道对不对.首先说D命令是 Delete up to the first
###embedded newline in the pattern space.也就是说D命令是删除模式空间中
###第一个换行符之前的内容,也就是删除第一行.然后D命令的解释还有一句,我认为
###这句很重要: Start next cycle, but skip reading from the input if there
### is still data in the pattern space.开始下一个循环,但是如果模式空间中有
###数据,则跳过从输入中读取数据.
#打印一个文件的最后一行(仿"tail -1")
sed '$!d' # method 1
sed -n '$p' # method 2
#只打印匹配的一定字符的行(仿"grep")
sed -n '/regexp/p' # method 1
sed '/regexp/!d' # method 2
#只打印于一定字符不匹配的行(效"grep -v")
sed -n '/regexp/!p' # method 1, corresponds to above
sed '/regexp/d' # method 2, simpler syntax
#打印包含"regexp"那一行的上一行,但是不打印包含"regexp"的行.
sed -n '/regexp/{g;1!p;};h'
###在命令执行到包含"regexp"那一行的上一行时,模式空间中这行的内容被
###拷贝到保留空间中.执行到包含"regexp"那一行时就打印它了.
#打印在"regexp"之后紧跟那一行,但是除去包含"regexp"的行.
sed -n '/regexp/{n;p;}'
#在"regexp"前后打印一行上下文,使其行号指示"regexp"在哪里出现(
#grep -A1 -B1相似)
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h
#查找"AAA"和"BBB"和"CCC".(任意顺序)
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 # most seds
gsed '/AAA\|BBB\|CCC/!d' # GNU sed only
#如果某段包含"AAA",则打印这一段。(空行用来分隔段落)
#HHsed v1.5必须在'x;'之后插入一个'G;'
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'
#如果某段包含"AAA"和"BBB"和"CCC",则打印这一段
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'
# 如果某段包含"AAA"或"BBB"或"CCC",则打印这一段
sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
gsed '/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d' # GNU sed only
#仅打印长于65个字符的行
sed -n '/^.\{65\}/p'
#仅打印少于65个字符的行
sed -n '/^.\{65\}/!p' # method 1, corresponds to above
sed '/^.\{65\}/d' # method 2, simpler syntax
#打印从字符"regexp"开始到文件结束的部分
sed -n '/regexp/,$p'
###还没啥,注意","的作用是选择行的范围,从包含regexp的行到最后一行
#根据行号来打印文件的一部分(-12行,包括在内)
sed -n '8,12p' # method 1
sed '8,12!d' # method 2
#打印第52行
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3, efficient on large files
###仅注意第三种方法效率比较高就行了
#从第三行开始,每7行打印一行
gsed -n '3~7p' # GNU sed only
sed -n '3,${p;n;n;n;n;n;n;}' # other seds
#打印文件中指定字符之间的部分(含字符在内)
sed -n '/Iowa/,/Montana/p' # case sensitive
#打印除指定字符之间部分之外的全文
sed '/Iowa/,/Montana/d'
#删除文件中重复的连续的行(似于"uniq"命令)
#重复行中第一行保留,其他删除
sed '$!N; /^\(.*\)\n\1$/!P; D'
###如果不是最后一行,就把下一行附加在模式空间,然后进行查找操作
###"^"和"$"中间的内容如果有重复就匹配成功.如果匹配不成功就用P打印
###第一行. 然后删除第一行.
#删除文件中重复的,但不连续的行。注意不要溢出保留空间的缓冲器的大小,
#否则使用GNU sed.
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'
#删除一个文件中前10行
sed '1,10d'
#删除一个文件中最后1行
sed '$d'
###与上边一个都是查找删除
#删除一个文件中最后2行
sed 'N;$!P;$!D;$d'
#删除一个文件中后10行
sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1
sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2
# 每8行删除1行
gsed '0~8d' # GNU sed only
sed 'n;n;n;n;n;n;n;d;' # other seds
#删除文件所有空白行(似于"grep '.' ")
sed '/^$/d' # method 1
sed '/./!d' # method 2
#删除文件中除一行空白行之外的所有连续空白行,也同时删除所有从头到尾的所
#有空白行(似于"cat -s")
sed '/./,/^$/!d' # method 1, allows 0 blanks at top, 1 at EOF
#方法1不允许文件顶部有空行,文件尾部可以
sed '/^$/N;/\n$/D' # method 2, allows 1 blank at top, 0 at EOF
#方法2不允许文件尾部有空行,文件顶部可以
###两个先选择,后删除命令.不多说了.
#删除文件中连续空行中除前两行空白行之外的所有空白行
sed '/^$/N;/\n$/N;//D'
###跟上边的命令相似,多了一步而已.
#删除文件开头部分中的所有空白行
sed '/./,$!d'
###从有字符开始的行直到最后一行保留,其他删除.
#删除文件结尾部分中的所有空白行
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' # works on all seds
sed -e :a -e '/^\n*$/N;/\n$/ba' # ditto, except for gsed 3.02*
#删除每个段落中最后1行
sed -n '/^$/{p;h;};/./{x;/./p;}'
# 从man page页里删除所有overstrikes(字符,backspace).如果使用unix系统v
#或者bash shell,echo命令可能需要-e参数.
sed "s/.`echo \\\b`//g" # double quotes required for Unix environment
#unix环境下需要双引号
sed 's/.^H//g' # in bash/tcsh, press Ctrl-V and then Ctrl-H
#在bash/tcsh中,按Ctrl-V然后按Ctrl-H
sed 's/.\x08//g' # hex expression for sed v1.5
#sed v1.5中的hex表达式
# 获得新闻组/e-mail信息的标题部分
sed '/^$/q' # deletes everything after first blank line
#获得新闻组/e-mail信息的主体部分
sed '1,/^$/d' # deletes everything up to first blank line
#获得题目的标题,但是删去开始的"Subject: "部分
sed '/^Subject: */!d; s///;q'
#获得返回的地址标题()
sed '/^Reply-To:/q; /^From:/h; /./d;g;q'
#正确解析地址。把email地址从一行中单独提出来并返回地址头()
sed 's/ *(*)/; s/>.*//; s/.*[:<] *//'
#给每行增加的尖括号和空格()信息被引用)
#sed 's/^/> /'
#删除每行的尖括号和空格()信息不被引用)
sed 's/^> //'
#删去大部分HTML标签(供多行标签))
sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
#抽取多部分未编码的二进制字节,删除无关的头信息,使得只保留未编码的部分.
#文件传送给sed必须保持正确的顺序。第一版本可以用于命令行的执行,第二版本
#可以制作成一个可执行的unix shell脚本
sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode # vers. 1
sed '/^end/,/^begin/d' "$@" | uudecode # vers. 2
#独立的压缩每个txt文件,删除原文件并且根绝原文本文件设置每个zip文件名。
echo @echo off >zipup.bat
dir /b *.txt | sed "s/^\(*\).TXT/pkzip -mo \1 \1.TXT/" >>zipup.bat
#删除每一行开头的空白 (空格,TAB)左对齐排列全文.
sed 's/^[ \t]*//'
### 替换成空,^[ \t]* 的含义为以空格或者TAB键开始的(或者是他们的组合)行.
#从每一行结尾处删除最后的空格(空格,TAB)
sed 's/[ \t]*$//'
#删除每一行的开头和结尾的空格
sed 's/^[ \t]*//;s/[ \t]*$//'
#在每一行开始处插入5个空格(整页偏移)
sed 's/^/ /'
#右对齐,按79列宽排列所有文本
sed -e :a -e 's/^.\{1,78\}$/ &/;ta'
###这个语句好像很麻烦,不过看懂了还挺有意思.:)
###首先出现了几个新东东1.":" 2."&". 3. "-e " 4."t",解释一下
###1.":" Label for b and t commands.(给b和t命令加注标签)
###2."&" 表示重复整个匹配的规则表达式.
###3. "-e" add the script to the commands to be executed
### 把脚本加到命令里用以执行
###如果从读入最后一个输入行并且执行最后一个t或者T命令后,一个s///命令成功替换,
###那么流程分支指向label处,如果label被忽略(就是没有成功替换吧,我想),那么流程
###分支指向脚本结束.
###回过头来看,整个sed命令行是一个循环执行的语句,每一行都要替换(78-当前行的字
###符数)次,所以如果整个文件比较大,或者一行字符数比较少,做这个动作就有点吃力了.
###不信你试试吧,呵呵.
#使所有文本居于79列宽的格式中央。在第一种方法中,每一行开头处的空格是
#很重要的,最后的空格被附在行尾。第二种方法中,一行开头的空格在中心对
#齐的行中被丢弃,行尾也没有原来结尾处的空格。
sed -e :a -e 's/^.\{1,77\}$/ & /;ta' # method 1
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\(*\)1/\1/' # method 2
#在每一行中用"bar" 替换(找并替换)foo"
sed 's/foo/bar/' # replaces only 1st instance in a line
# 在一行中,仅在第一次出现时替换
sed 's/foo/bar/4' # replaces only 4th instance in a line
#在一行中,仅在第四次出现时替换
sed 's/foo/bar/g' # replaces ALL instances in a line
#在一行中替换所有出现的值
###就不直接翻译了,大概意思就是replacement处可以包含&代表匹配的模式空间中
###的部分,特殊的\1-\9可以代表regexp中相应的"子表达式",也就是说前面regexp
###可以分为几个子表达式,而后边 replacement中可以用\1-\9分别代表它们.这样就
###增加了灵活性,便于修改sed命令.
###把regexp中的\去掉后,就变成(.*)foo(*foo),其中(.*)表示零个或者多个字符,
###这样加上后边的\1bar\2就变成了改变倒数第二个foo,而倒数第一个不变
sed 's/\(*\)foo/\1bar/' #只替换最后一个值
#在每一含有"baz"的行中用"bar"替换(查找并替换)foo"
sed '/baz/s/foo/bar/g'
### /baz/用来查找,后边的用来替换
#在每一不含有"baz" 的行中用"bar"替换(找并替换)foo"
sed '/baz/!s/foo/bar/g'
#将"scarlet"或者"ruby"或者"puce"替换成"red"
sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g' # most seds
#反转文章行的顺序(类似"tac" )
sed '1!G;h;$!d' # method 1
sed -n '1!G;h;$p' # method 2
#反转一行中每个字符的顺序(类似"rev")
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
###'/\n/!G'是判断本行是否有换行符,如果没有执行G命令
###'s/\(.\)\(.*\n\)/&\2\1/'命令是在原来行+第二个字符(或者没有)开始到换行符+第一个字符
###//D命令是在模式空间删除第一行,注意执行完成后如果模式空间不为空,继续下一个
###循环执行.
###s/.//命令是删除第一个字符
#把两行合为一行(类似于"paste")
sed '$!N;s/\n/ /'
#如果一行以"\"结束,把下一行加在此行上
sed -e :a -e '/\\$/N; s/\\\n//; ta'
#如果一等号开始某一行,把这一行加到前一行后边,并且用一个空格替换等号
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'
## P命令--Print up to the first embedded newline of the current
###pattern space.打印当前模式空间中第一行。
###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.
###删除当前模式空间中第一行。开始新的循环,但是如果在模式空间中仍然
###有数据,那么跳过读取输入。
#给数字串加逗号,把"1234567"变为"1,234,567"
gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta' # GNU sed
sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' # other seds
###(.*[0-9])表示零个或者多个字符(可能包含数字)+一个数字,而
###([0-9]{3})表示三个数字, 然后不停的替换,直到条件不成立,也就是没有
###四个以上连续的数字出现就停止了.
#给带有小数点和负号的数字的数字加上逗号
gsed ':a;s/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g;ta'
#每五行后加一空行
gsed '0~5G' # GNU sed only
sed 'n;n;n;n;G;' # other seds
#打印一个文件的前10行(模仿动作"head")
sed 10q
#打印一个文件的第一行(仿"head -1")
sed q
### q命令的解释Immediately quit the sed script without processing
###any more input, except that if auto-print is not disabled the
###current pattern space will be printed.
### 所以上边两个命令都清楚了,执行到第10行退出就打印前10行,执行第一行
###就退出就打印第一行
#打印一个文件的后10行(仿"tail")
sed -e :a -e '$q;N;11,$D;ba'
###Label b : Branch to label; if label is omitted, branch to end of script.
###命令D 删除模式空间内第一个 newline 字母 \n 前的资料。
###命令N 把输入的下一行添加到模式空间中。
### b label:分支到脚本中带有标号的地方,如果标号不存就分支到脚本的末尾
#打印一个文件的最后两行(仿"tail -2")
sed '$!N;$!D'
###sed '$!N;$!D' : 对文件倒数第二行以前的行来说,N 将当前行的下一行放到模
###式空间中以后,D 就将模式空间的内容删除了;到倒数第二行的时候,将最后一行
###附加到倒数第二行下面,然后最后一行不执行 D ,所以文件的最后两行都保存下来了。
###不知道是这段话说得有些含糊,还是我理解得有偏差,总觉得D命令解释成
###"将模式空间的内容删除了"有些让人糊涂.
###而我是这样理解的,不知道对不对.首先说D命令是 Delete up to the first
###embedded newline in the pattern space.也就是说D命令是删除模式空间中
###第一个换行符之前的内容,也就是删除第一行.然后D命令的解释还有一句,我认为
###这句很重要: Start next cycle, but skip reading from the input if there
### is still data in the pattern space.开始下一个循环,但是如果模式空间中有
###数据,则跳过从输入中读取数据.
#打印一个文件的最后一行(仿"tail -1")
sed '$!d' # method 1
sed -n '$p' # method 2
#只打印匹配的一定字符的行(仿"grep")
sed -n '/regexp/p' # method 1
sed '/regexp/!d' # method 2
#只打印于一定字符不匹配的行(效"grep -v")
sed -n '/regexp/!p' # method 1, corresponds to above
sed '/regexp/d' # method 2, simpler syntax
#打印包含"regexp"那一行的上一行,但是不打印包含"regexp"的行.
sed -n '/regexp/{g;1!p;};h'
###在命令执行到包含"regexp"那一行的上一行时,模式空间中这行的内容被
###拷贝到保留空间中.执行到包含"regexp"那一行时就打印它了.
#打印在"regexp"之后紧跟那一行,但是除去包含"regexp"的行.
sed -n '/regexp/{n;p;}'
#在"regexp"前后打印一行上下文,使其行号指示"regexp"在哪里出现(
#grep -A1 -B1相似)
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h
#查找"AAA"和"BBB"和"CCC".(任意顺序)
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 # most seds
gsed '/AAA\|BBB\|CCC/!d' # GNU sed only
#如果某段包含"AAA",则打印这一段。(空行用来分隔段落)
#HHsed v1.5必须在'x;'之后插入一个'G;'
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'
#如果某段包含"AAA"和"BBB"和"CCC",则打印这一段
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'
# 如果某段包含"AAA"或"BBB"或"CCC",则打印这一段
sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
gsed '/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d' # GNU sed only
#仅打印长于65个字符的行
sed -n '/^.\{65\}/p'
#仅打印少于65个字符的行
sed -n '/^.\{65\}/!p' # method 1, corresponds to above
sed '/^.\{65\}/d' # method 2, simpler syntax
#打印从字符"regexp"开始到文件结束的部分
sed -n '/regexp/,$p'
###还没啥,注意","的作用是选择行的范围,从包含regexp的行到最后一行
#根据行号来打印文件的一部分(-12行,包括在内)
sed -n '8,12p' # method 1
sed '8,12!d' # method 2
#打印第52行
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3, efficient on large files
###仅注意第三种方法效率比较高就行了
#从第三行开始,每7行打印一行
gsed -n '3~7p' # GNU sed only
sed -n '3,${p;n;n;n;n;n;n;}' # other seds
#打印文件中指定字符之间的部分(含字符在内)
sed -n '/Iowa/,/Montana/p' # case sensitive
#打印除指定字符之间部分之外的全文
sed '/Iowa/,/Montana/d'
#删除文件中重复的连续的行(似于"uniq"命令)
#重复行中第一行保留,其他删除
sed '$!N; /^\(.*\)\n\1$/!P; D'
###如果不是最后一行,就把下一行附加在模式空间,然后进行查找操作
###"^"和"$"中间的内容如果有重复就匹配成功.如果匹配不成功就用P打印
###第一行. 然后删除第一行.
#删除文件中重复的,但不连续的行。注意不要溢出保留空间的缓冲器的大小,
#否则使用GNU sed.
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'
#删除一个文件中前10行
sed '1,10d'
#删除一个文件中最后1行
sed '$d'
###与上边一个都是查找删除
#删除一个文件中最后2行
sed 'N;$!P;$!D;$d'
#删除一个文件中后10行
sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1
sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2
# 每8行删除1行
gsed '0~8d' # GNU sed only
sed 'n;n;n;n;n;n;n;d;' # other seds
#删除文件所有空白行(似于"grep '.' ")
sed '/^$/d' # method 1
sed '/./!d' # method 2
#删除文件中除一行空白行之外的所有连续空白行,也同时删除所有从头到尾的所
#有空白行(似于"cat -s")
sed '/./,/^$/!d' # method 1, allows 0 blanks at top, 1 at EOF
#方法1不允许文件顶部有空行,文件尾部可以
sed '/^$/N;/\n$/D' # method 2, allows 1 blank at top, 0 at EOF
#方法2不允许文件尾部有空行,文件顶部可以
###两个先选择,后删除命令.不多说了.
#删除文件中连续空行中除前两行空白行之外的所有空白行
sed '/^$/N;/\n$/N;//D'
###跟上边的命令相似,多了一步而已.
#删除文件开头部分中的所有空白行
sed '/./,$!d'
###从有字符开始的行直到最后一行保留,其他删除.
#删除文件结尾部分中的所有空白行
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' # works on all seds
sed -e :a -e '/^\n*$/N;/\n$/ba' # ditto, except for gsed 3.02*
#删除每个段落中最后1行
sed -n '/^$/{p;h;};/./{x;/./p;}'
# 从man page页里删除所有overstrikes(字符,backspace).如果使用unix系统v
#或者bash shell,echo命令可能需要-e参数.
sed "s/.`echo \\\b`//g" # double quotes required for Unix environment
#unix环境下需要双引号
sed 's/.^H//g' # in bash/tcsh, press Ctrl-V and then Ctrl-H
#在bash/tcsh中,按Ctrl-V然后按Ctrl-H
sed 's/.\x08//g' # hex expression for sed v1.5
#sed v1.5中的hex表达式
# 获得新闻组/e-mail信息的标题部分
sed '/^$/q' # deletes everything after first blank line
#获得新闻组/e-mail信息的主体部分
sed '1,/^$/d' # deletes everything up to first blank line
#获得题目的标题,但是删去开始的"Subject: "部分
sed '/^Subject: */!d; s///;q'
#获得返回的地址标题()
sed '/^Reply-To:/q; /^From:/h; /./d;g;q'
#正确解析地址。把email地址从一行中单独提出来并返回地址头()
sed 's/ *(*)/; s/>.*//; s/.*[:<] *//'
#给每行增加的尖括号和空格()信息被引用)
#sed 's/^/> /'
#删除每行的尖括号和空格()信息不被引用)
sed 's/^> //'
#删去大部分HTML标签(供多行标签))
sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
#抽取多部分未编码的二进制字节,删除无关的头信息,使得只保留未编码的部分.
#文件传送给sed必须保持正确的顺序。第一版本可以用于命令行的执行,第二版本
#可以制作成一个可执行的unix shell脚本
sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode # vers. 1
sed '/^end/,/^begin/d' "$@" | uudecode # vers. 2
#独立的压缩每个txt文件,删除原文件并且根绝原文本文件设置每个zip文件名。
echo @echo off >zipup.bat
dir /b *.txt | sed "s/^\(*\).TXT/pkzip -mo \1 \1.TXT/" >>zipup.bat
发表评论
-
[转]Linux文件查找命令find,xargs详述
2013-04-25 17:14 1014http://www.cnblogs.com/serendip ... -
Shell编程中Shift的用法[转]
2013-04-25 17:02 994[转]:http://www.cnblogs.com/imag ... -
ANT 执行SHELL脚本
2013-03-20 09:20 5318ANT 执行SHELL脚本 solaris环境 [1]vi ... -
shell数组使用技巧(转载)
2013-03-16 00:25 704转自:http://www.cnblogs.com ... -
eval学习与应用
2013-04-25 17:09 1090eval的作用是再次执行命 ... -
awk使用经验
2013-03-14 16:37 01. 统计列数。 FIELD_NUM=`cat "$ ... -
【转】用shell生成简单格式的xml
2013-02-25 21:53 2134http://blog.csdn.net/dengzhaoqu ... -
shell数组的使用
2012-08-31 10:40 1482B shell #!/bin/bash #set -x ... -
在sed中使用变量 通常,我们使用sed进行变量替换的时候,替换和被替换变量都是hard-coded的。例如: sed -n ‘/comm/p’ /tmp/
2012-07-17 10:44 2534在sed中使用变量 通常,我们使用sed进行变量替换的时候, ... -
shell中的文件分类、合并和切割
2012-06-29 09:45 3319sort用法 s o r t命令选项很长,下面仅介绍各种选项。 ... -
shell合并两个文件(列)
2012-06-29 09:45 11321题目如下: file1. 1 2 2 3 3 4 4 ... -
shell中cut命令的使用方法
2012-06-28 22:23 1870cut命令是用来剪下文本文件里的数据,文本文件可以是字段类型或 ... -
shell合并两个文件
2012-06-28 16:48 1169file1. 1 2 2 3 3 4 4 5 5 6 ... -
read读入分隔符
2012-06-28 08:49 1324$ cat 1.txt 1,a 2 ... -
sort命令
2012-06-12 10:19 1007实用的分类sort操作 ... -
sed替换
2012-06-28 16:49 1077比如,要将目录/modules下面所有文件中的zhangsan ... -
grep正则表达式
2012-06-28 16:48 1125grep the regex.txt grep "t ... -
shell字符串截取
2011-12-14 09:28 1220sed "s/\'/\'\'/g" a.t ... -
shell的while循环
2011-12-14 09:15 1273#!/bin/sh #filename:2.sh b=9 ... -
Shell计算
2011-12-12 14:03 821echo "这是计算:1+2+3+...的函数&qu ...
相关推荐
由于sed处理的是经过前一个命令修改后的行,所以最终的结果是将“pig”替换成了“horse”。 sed命令可以指定0个、1个或2个地址。如果没有指定地址,那么命令将应用于每一行。如果指定了一个地址,那么命令应用于...
sed 命令可以用来处理多行文本,例如: ``` [root@svr5 ~]# sed -n '/^rpc/,/^$/p' /etc/passwd ``` 这将输出 /etc/passwd 文件中的 rpc 用户记录。 本文档详细介绍了正则表达式的基本用法和sed命令的应用,旨在...
强大的命令行形式文本处理工具sed(GNU stream editor),此工具为win32移植版本,用于windows环境下,结合正则表达式可以批量完成大量文本文件的处理,相关学习文档本社区有大量的资源
根据提供的文件信息,我们可以归纳出一系列关于sed与awk在Linux/Unix系统下的使用方法与技巧。下面将详细解析这些知识点: ### sed 常用命令与应用 #### 1. 删除空行 ``` sed '/^$/d filename' ``` 这条命令会删除...
在使用 sed 命令处理文本时,需要注意 Windows 和 Linux 的换行符号问题。Windows 使用的是 `\r\n` 换行符号,而 Linux 使用的是 `\n` 换行符号。如果从 Windows 导出文件到 Linux 中处理,可能会出现问题,因为 ...
`sedsed`工具在`sed`基础上增强了删除操作的便利性,简化了文本处理流程,尤其适合于需要快速处理文本的场景。熟悉并掌握`sedsed`的用法,能提升Linux环境下的文本处理效率,是Linux系统管理员和开发者的重要工具之...
Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处理、编辑文本文件。sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 语法格式:sed [参数] 常用参数: -e或–...
`sed`是Stream Editor的缩写,在Linux系统中是一种非常强大的文本处理工具。它能够按照脚本指令读取输入文件(标准输入或文本文件),对其进行模式匹配、替换、删除等操作,并将处理后的结果输出到标准输出或其他...
sed(stream editor)是一种强大的文本处理工具,在Linux和Unix环境中被广泛用于非交互式的文本编辑任务。它能够读取输入流(通常来自文件或标准输入),执行指定的操作,并将结果输出到标准输出或其他文件中。sed...
**sed工具介绍** `sed` 是“流编辑器”...总的来说,`sed`是一款功能强大的文本处理工具,无论是简单的文本替换还是复杂的文本转换,它都能胜任。了解并熟练使用`sed`,对于提升日常的文本处理效率非常有帮助。
Sed是一个流编辑器(Stream Editor),它一次处理文本文件的一行内容,对模式空间(pattern space)中的文本执行一系列编辑操作。Sed通常用于快速编辑文件,尤其是在处理大量数据时,它不会直接修改原文件,而是将...
总的来说,sed是一个极其有用的文本处理工具,尤其对于程序员和系统管理员来说,它能够在命令行环境中高效地处理文本文件,简化工作流程。而sed-4.2.1-setup.exe的提供,方便了Windows用户在本地系统中安装和使用这...
SED的主要优势在于它能够高效地处理重复性的文本编辑任务,如字符串替换、行的删除和插入等,特别适合于批量处理大型文本文件。 #### 2. SED的应用场景 在日常的文本处理工作中,SED常常被用来执行以下几种常见的...
sed内部有保持缓冲区(hold buffer)和模式空间(pattern space),它们用于在处理文本流时暂存文本。通过D、G、H、N和P等命令可以实现多行技术,处理跨越多行的文本。 在流控制方面,GNU sed提供了分支命令,允许...
Linux 教程 - Linux 文本处理 - sed sed 是一个强大的流编辑器,主要用于文本处理。它可以从文件或管道中读取文本,并对其进行处理,然后输出处理后的结果。sed 的工作原理是从文件或管道中读取一行,处理一行,...
sed(Stream Editor)是一种非交互式的文本编辑工具,适用于自动化处理文本编辑任务。当你面临以下几种情况时,使用sed会非常有效: - **处理大文件:** 对于过大的文件,直接使用交互式编辑器可能会很耗时或导致...
它不仅系统地介绍了sed和awk的使用方法,还通过实例演示了如何编写有效的脚本来处理文本数据。对于那些希望提高自己在Linux环境中处理文本和数据能力的用户来说,这本书是一个极佳的学习资源。 Sed的常用功能包括但...
标题中的"sed.exe win x32 x64"指的是在Windows操作系统中,为32位(x32)和64位(x64)系统提供的sed命令行工具。sed(流编辑器Stream Editor)是一个...正确安装并掌握sed的使用,能极大地提高你在处理文本任务时的效率。