想知道:logo(x 61,y 79,t1,copy件_PLOCALlpMemory

那些熟悉旋律但不知道歌名的BGM - 歌单 - 网易云音乐
那些熟悉旋律但不知道歌名的BGM
这里的歌,都是听过好多遍但不知道歌名的,大部分为视频,综艺节目,游戏直播等常用的BGM。
当然,觉得喜欢可以收藏下。歌单持续不定时更新
播放:9545次
喜欢这个歌单的人
网易云音乐多端下载
同步歌单,随时畅听320k好音乐
网易公司版权所有(C)杭州乐读科技有限公司运营:他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Apple DeveloperAccess denied | ioffer.com used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website (ioffer.com) has banned your access based on your browser's signature (3fb7-ua98).salt '*' cmd.run 'sed -i 's/SELINUX\=enforcing/SELINUX\=disabled/g' /etc/sysconfig/selinux'
&http://hi.baidu.com/gz_gzhao/item/3c7cacfacfa494c40cd1c865
#! /bin/bash
echo "测试写文件"cat&test1&&EOF这是一个由shell创建的文件this is a file created by shell.we want to make a good world.EOF
其中,&&EOF 表示当遇到EOF时结束输入。
cat&test1&&EOF 这间没有空格
http://kevingo75.blogspot.com/2011/08/shell-script-echoapppend.html
在編寫Shell Script時,如果你有echo到某個檔案的需求,你希望寫入檔案時是以附加(append)的方式進行,而不是整個覆蓋的話,你可以使用【&&】來取代【&】:&echo "aaa" && /home/kevingo/example.txt&echo "bbb" && /home/kevingo/example.txt&如此一來,example.txt中的內容就會是:&aaa&bbb
====================================================
http://bbs.phpchina.com/blog-668.html
ctags:&&linux perl shell perl& vi grep awk xargs& 批量替换
这两天在构建一个应用的使用用到了maven,由于project很大,足足有700多个 pom.xml文件,更郁闷的是在很多pom.xml文件里都单独指定了资源库的url,我需要把这些资源库的url统一指定到nexus本地中央库.手 工一个个改文件配置有点不太实际,所以google了一下,找到批量替换文件内容的好方法,命令结构如下:find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的”http://repo1.maven.org/maven2“ 替换为”http://localhost:8081/nexus/content/groups/public“.find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content /groups/public|g'这里用到了Perl语言,perl -pi -e 在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.从命令行中使用Perl 能够帮助实现一些强大的、实时的转换。认真研究正则表达式,并正确地使用,将会为您省去大量的手工编辑工作。
find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content/groups/public|g'
Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。用sed命令可以批量替换多个文件中的 字符串。&sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`例如:我要把mahuinan替换 为huinanma,执行命令:&sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www'这是目前linux最简单的批量替换字符串命令了!具体格式如下:&sed -i "s/oldString/newString/g"& `grep oldString -rl /path`实例代码:sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl ./`
在日程的开发过程中,可能大家会遇到将某个变量名修改 为另一个变量名的情况,如果这个变量是一个局部变量的话,vi足以胜任,但是如果是某个全局变量的话,并且在很多文件中进行了使用,这个时候使用vi就是 一个不明智的选择。这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改:grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'from:&补充说明:sed -i "s/oldString/newString/g"& `grep oldString -rl /path`&&&&对多个文件的处理可能不支持,需要用&xargs, 搞定。变种如下:grep&oldString -rl /path | xargs&sed -i "s/oldString/newString/g"&注意:&在& `grep oldString -rl /path`&&&&中&`&为1前边的翻引号`,而不是enter 前的&'
&==================
http://www.cnblogs.com/ggjucheng/archive//2856901.html
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为&模式空间&(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed使用参数
[root@www ~]# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
以行为单位的新增/删除
将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!
[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(后面省略).....
sed 的动作为 '2,5d' ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~ 另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!同时也要注意的是, sed 后面接的动作,请务必以 '' 两个单引号括住喔!
只要删除第 2 行
nl /etc/passwd | sed '2d'
要删除第 3 到最后一行
nl /etc/passwd | sed '3,$d'
在第二行后(亦即是加在第三行)加上『drink tea?』字样!
[root@www ~]# nl /etc/passwd | sed '2a drink tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....
那如果是要在第二行前
nl /etc/passwd | sed '2i drink tea'
如果是要增加两行以上,在第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』
[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
& drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....
每一行之间都必须要以反斜杠『 \ 』来进行新行的添加喔!所以,上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。
以行为单位的替换与显示
将第2-5行的内容取代成为『No 2-5 number』呢?
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....(后面省略).....
透过这个方法我们就能够将数据整行取代了!
仅列出 /etc/passwd 文件内的第 5-7 行
[root@www ~]# nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。
数据的搜寻并显示
搜索 /etc/passwd有root关键字的行
nl /etc/passwd | sed '/root/p'
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
....下面忽略
如果root找到,除了输出所有行,还会输出匹配行。
使用-n的时候将只打印包含模板的行。
nl /etc/passwd | sed -n '/root/p'
root:x:0:0:root:/root:/bin/bash
数据的搜寻并删除
删除/etc/passwd所有包含root的行,其他行输出
nl /etc/passwd | sed
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
....下面忽略
#第一行的匹配root已经删除了
数据的搜寻并执行命令
找到匹配模式eastern的行后,
搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'&1 &root:x:0:0:root:/root:/bin/blueshell
如果只替换/etc/passwd的第一个bash关键字为blueshell,就退出
nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'
root:x:0:0:root:/root:/bin/blueshell
最后的q是退出。
数据的搜寻并替换
除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:
sed 's/要被取代的字串/新的字串/g'
先观察原始信息,利用 /sbin/ifconfig 查询 IP
[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....(以下省略).....
本机的ip是192.168.1.100。
将 IP 前面的部分予以删除
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
接下来则是删除后续的部分,亦即:&192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
将 IP 后面的部分予以删除
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100
一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
root:x:0:0:root:/root:/bin/blueshell
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。
直接修改文件内容(危险动作)
sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试! 我们还是使用下载的 regular_express.txt 文件来测试看看吧!
利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』
[root@www ~]# sed -i '$a # This is a test' regular_express.txt
由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』!
sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!
&==================
http://yidao620c.iteye.com/blog/1880974
4.1 sed命令基本用法
sed是一个非交互式文本编辑器,它可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘输入、文件重定向、字符串、变量、来自管道的文本等等。
sed从文本的一个文本行或标准输入中读取数据,将其复制到缓存区,然后读取命令行或脚本的第一个命令,对此命令要求的行号进行编辑,重复此过程,直到命令行或脚本中所有命令都执行完了。sed可以一次性处理所有的编辑命令,非常高效
sed适用于下面三种场合:
* 编辑相对于交互式文本编辑器而言太大的场合
* 编辑命令太复杂,在交互式文本编辑器中难以输入的情况
* 对文件扫描一遍,但是需要执行多个编辑函数的情况
sed只是对缓存区中原始文件的副本进行编辑,并不编辑原始文件。因此,如果需要保存更改内容,需要将输出重定向到另一个文件,可以使用下面的命令:
sed 'sed命令' input_file & result_file
或者还有另一种方法就是 -w 选项,这个后面讲到
有三种方式调用sed:
① 直接在shell命令行上调用
# sed [选项] 'sed命令' 输入文件
② 将sed命令插入脚本文件后,通过sed命令调用脚本:
# sed [选项] -f sed脚本文件名 输入文件
③ 将sed命令写入脚本文件后,将其+x变成可执行
./sed脚本文件 输入文件
第三种方式需要在文件头部加上 #!/bin/sed
sed命令的常用选项:
-n & &不打印所有行到标准输出
-e & &表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令,-e可以省略
-f & & 表示正在调用sed脚本文件
sed命令通常由定位文本行和sed编辑命令两部分组成,sed编辑命令对定位到的行进行各种编辑处理
sed提供两种方式定位文本行:
* 使用行号,指定一行或者行号范围
* 使用正则表达式
sed命令定位文本行的方法:
x为指定行号
指定从x到y的行号范围
查询包含模式的行
/pattern/pattern/
查询包含两个模式的行
/pattern/,x
从与pattern的匹配行到x号行之间的行
x,/pattern/
从x号行到与pattern的匹配行之间的行
查询不包含x和y行号的行
===================================分割线=======================
sed编辑命令表
打印匹配行
打印匹配行号
在定位行之后追加文本信息
在定位行之前插入文本信息
删除定位行
用新文本替换定位行
使用替换模式替换相应的模式
从另一个文件中读文本
将文本写入到另一个文件中
第一个模式匹配完成后退出
显示与八进制ASCII码等价的控制字符
在定位行执行的命令组
读取下一个输入行,用下一个命令处理新的行
将模式缓存区的文本复制到保持缓存区
将模式缓存区的文本追加到保持缓存区
互换模式缓存区和保持缓存区的内容
将保持缓存区的内容复制到模式缓存区
将保持缓存区的内容追加到模式缓存区
========================分割线============================
各个选项和编辑命令详解:
1,sed命令的-n选项和p命令
# sed -n '1p' input
#&sed '1p' input
从输出可以看出,加了-n后标准输出上只有第一行打印出来了,而不加-n时候,先打印第一行,然后打印整个文件内容。所以-n选项的意义是:不打印sed编辑内容也就是input的全部内容。只打印匹配的行
# sed -n '3,6p' input & --& 打印从3到6行
# sed -n '/certificate/p' input &--& 打印匹配模式行,注意大小写是敏感的
2,sed命令的-e选项
由于sed不支持同时带多个编辑命令的用法,因此需要用-e选项指定每个编辑命令
# sed -n -e '/Certificate/p' -e '/Certificate/=' input
3,sed命令的-f选项
-f选项只有调用sed脚本文件时才起作用,追加文本、插入文本、修改文本、删除文本和替换文本等功能往往需要几条sed命令才能完成,所以,往往将这些命令写入sed脚本,然后调用sed脚本来完成。
下面是这个sed的脚本:
#!/bin/sed&-f&&
/file:/a\&&
We&append&a&new&line.\&&
We&append&another&line.&&
注:上面的/file:/a\中的\表示在换新行后添加内容,而下面内容中的\也表示换行。
4.2.2 sed文本定位的一组例子
1. 匹配元字符
如果目标字符串中包含元字符,需要使用转义符\屏蔽其特殊意义。
# sed -n '/\./p' input --& 打印含有.的行
2. 使用元字符进行匹配
sed可以灵活使用正则表达式的元字符进行匹配,不过注意的是:$在正则表达式中表示行尾,但是在sed命令中却表示最后一行,而写在//中间的$就表示行尾了,哈哈。
# sed -n '$p' input --& 打印最后一行
# sed -n '/^$/p' input -& 打印空行
!表示取反,也就是不满足条件的时候就处理
#&sed -n '/.*this/!p' input &--& 打印不包含this的行
# sed -n '3,6!p' input --& 打印不在3至6行间的行
4.2.3 sed基本编辑命令的一组例子
1. 插入文本
插入文本和追加文本类似,区别仅仅是追加文本是在匹配行的后面插入,而插入文本是在匹配行的前面插入
sed插入文本符号位i\,插入文本的格式为:
sed '指定地址 i\text' 输入文件
新建名为insert.sed的脚本,内容如下:
Bash代码&&
#!/bin/sed&-f&&&
#&this&is&comment&&
#&date&:&2013/06/02&&
#&author&:&xiongneng&&
/this&is/i\&&
We&insert&a&new&line&#插入的文本内容&&
&2. 修改文本
修改文本是指将所匹配的问本行用新文本代替,也就是只能整行替换,sed修改文本符号位c\
sed '指定行 c\text' 输入文件
3. 删除文本
sed删除文本命令可以将指定行或指定行范围进行删除,sed的删除文本符号为d
sed '指定行 d' 输入文件
4.替换文本
sed替换文本将所匹配的文本行中找到的字符串用新的字符串去代替,常用。而上面的修改文本只能整行,sed替换文本符号为s
sed -n 's/被替换的字符串/新的字符串/p' --& 只替换每行中第一次找到的
sed -n 's/被替换的字符串/新的字符串/gp' --& 替换每行中所有找到的
sed -n 's/被替换的字符串/新的字符串/np' --& 替换每行中第n次找到的
sed替换文本中有个重要的符号&,它表示保存被替换的字符串以供调用。
比如下面两条命令等级:(都是将this字符串用括号括起来)
# sed -n 's/this/(&)/gp' input
# sed -n 's/this/(this)/gp' input
5. 写入到一个新文件
上面提到的都是对缓存区中输入文件的复制内容进行编辑,如果要保存编辑结果,需要将编辑后的文本重定向到另一个文件,sed写入文件符号为w,基本格式为:
# sed -n '1,5 w output' input
# sed -n '/this/2 output' input
#&sed -n 's/this/(&)/gw output' input &--& 将this加上括号后,匹配行写入到output中去
注:这里写到新文件中的只有匹配的行修改后的数据,如果要整个文件内容都写进去,使用重定向&& 或者&
6. 从文件中读入文本内容
sed命令还可以将其他文件中的内容读入,并附加在指定地址后,sed读入文件的符号为r
# sed '/this/r otherfile' input
7. 退出命令
sed命令的q选项表示完成指定地址匹配后立即退出
# sed -n '/this/p' input &--& 打印出匹配的全部字符串
# sed -n -e '/this/p' -e '/this/q' test.txt &--& 找到第一个匹配的打印后就立即退出
8. 变换命令
sed命令的y选项表示字符变换,它将一系列的字符变换为相应的字符,逐个处理的
# sed 'y/被变换的字符序列/变换的字符序列/' 输入文件
# sed 'y/12345/ABCDE' input --& 将input中1变成A,2变成B,3变成C,4变成D,5变成E
9. 显示控制字符
sed 1命令可以显示出文件中的控制字符,比如退格键、F1键、Shift键等
# sed -n '1,$1' input
10. 在定位行执行命令组
sed编辑命令中的{}可以指定在定位行上所执行的命令组,它的作用与sed的-e选项类似,都是为了在定位行执行多个编辑命令。
下面的命令等价:
# sed -n -e '/this/p' -e '/this/q' test.txt&
# sed -n '/this/{p;q}' test.txt --&显然这个更NB点
4.2.4 sed高级编辑命令的一组例子
1. 处理匹配行的下一行
sed编辑命令n的意义是读取下一个输入行,用n后面的一个命令处理该行,由于此时通常有个多个编辑命令,所以命令n需要与{}配合使用
# sed '/this is/{n;s/her/him/;}' input --& 找到this is关键词那行,然后将它下一行的her替换成him
2. sed缓存区的处理
前面提到的所有编辑命令都是将输入文件复制到缓存区,对缓存区的复制内容进行处理。实际上,sed有两个缓存区,模式缓存区 Pattern Buffer 和保持缓存区 Hold Buffer。前面都是Pattern Buffer,而保持缓存区是另一个内存空间,sed的一些编辑命令可以对保持缓存区进行处理,并与模式缓存区的内容互换
# sed h、x、G命令的用法
# sed &'/subject/h; /object/x; $G' input
第一个h命令是将模式缓存区内容复制到保持缓存区,也就是说当找到subject的行的时候,就将该行复制到Hold Buffer,如果该行有object关键词就将模式缓存区和保持缓存内容互换后输出模式缓存区内容,第三条命令表示如果是到了最后一行,就直接输出保持缓存区内容。
h和H、g和G是两组对应的命令
h和H命令是将模式缓存区内容替换掉保持缓存区内容,不过h是副本,即将保持缓存区的就内容覆盖掉,而H是追加,即在保持缓存区内容上增加新的内容
g和G是将保持缓存区内容替换掉模式缓存区内容,同样,g是副本、G是追加。
3.利用分号;分割多个编辑命令,这个比起-e选项更NB一点。^_^
# sed &'/subject/h; /object/x; $G' input
&================
http://bbs.chinaunix.net/thread--1.html
& 把输出内容放到你的文件中,(前清空在输入)&&同上(但是表示追加)
==========================================
http://blog.csdn.net/lzyzuixin/article/details/7638979
比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做:sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`解释一下:-i 表示inplace edit,就地修改文件-r 表示搜索子目录-l 表示输出匹配的文件名这个命令组合很强大,要注意备份文件。(1)sed 'y//ABCDEFGHIJ/' test_sedsed 'y//ABCDEFGHIJ/' filenameABCDEFGHIJBCDEFGHIJACDEFGHIJABDEFGHIJABC注意变换关系是按两个list的位置对应变换其中:test_sed的内容是:(2)替换每行所有匹配sed 's/01/Ab/g' test_sedAb注意:第一行的0,1没有分别替换为A,b删除:d命令&&
& &&&$ sed '2d' example-----删除example文件的第二行。
& &&&$ sed '2,$d' example-----删除example文件的第二行到末尾所有行。
& &&&$ sed '$d' example-----删除example文件的最后一行。
& &&&$ sed '/test/'d example-----删除example文件所有包含test的行。
替换:s命令&&
& &&&$ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
& &&&$ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
& &&&$ sed 's/^192.168.0.1/&localhost/'example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加localhost,变成192.168.0.1localhost。
& &&&$ sed -n 's/\(love\)able/\1rs/p' example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。
& &&&$ sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,&#&在这里是分隔符,代替了默认的&/&分隔符。表示把所有10替换成100。
选定行的范围:逗号
& &&&$ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。
& &&&$ sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。
& &&&$ sed '/test/,/check/s/$/sed test/' example-----对于模板test和west之间的行,每行的末尾用字符串sed test替换。
多点编辑:e命令&&
$ sed -e '1,5d' -e 's/test/check/'example-----(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
& &&&$ sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e更好的命令是--expression。它能给sed表达式赋值。
从文件读入:r命令&&
& &&&$ sed '/test/r file' example-----file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。
写入文件:w命令&&
& &&&$ sed -n '/test/w file' example-----在example中所有包含test的行都被写入file里。
追加命令:a命令&&
& &&&$ sed '/^test/a\\---&this is a example' example&-----'this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。
插入:i命令 $ sed '/test/i\\new line-------------------------' example如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。下一个:n命令&&
& &&&$ sed '/test/{ s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。
变形:y命令&&
& &&&$ sed '1,10y/abcde/ABCDE/' example-----把1--10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。
退出:q命令&&
& &&&$ sed '10q' example-----打印完第10行后,退出sed。
保持和获取:h命令和G命令&&
$ sed -e '/test/h' -e '$Gexample-----在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。
保持和互换:h命令和x命令&&
& &&&$ sed -e '/test/h' -e '/check/x' example -----互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。
& && &7. 脚本Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。& &&&8. 小技巧&&
& &&&在sed的命令行中引用shell变量时要使用双引号,而不是通常所用的单引号。下面是一个根据name变量的内容来删除named.conf文件中zone段的脚本:& &&&name='zone\ "localhost"'sed "/$name/,/};/d" named.conf
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`例如:替换/home下所有文件中的sed -i "s/www.itbbs.cn/chinafar.com/g" `grep&&-rl /home`&二、下面这条命令:perl -pi -e 's|ABCD|Linux|g' `find ./ -type f`将调用perl执行一条替换命令,把find命令找到的所有文件内容中的ABCD替换为Linuxfind ./ -type f此命令是显示当前目录下所有的文件上面的&s|ABCD|Linux| g&是perl要执行的脚本,即把所有ABCD替换为Linux如果不写最后的那个g,&s|ABCD|Linux| &将只替换每一行开头的ABCD&当编辑指令(参照[section2.2])在命令列上执行时,其前必须加上选项-e。其命令格式如下:sed-e'编辑指令1'-e'编辑指令2'...文件档其中,所有编辑指令都紧接在选项-e之後,并置於两个"'"特殊字元间。另外,命令上编辑指令的执行是由左而右。一般编辑指令不多时,使用者通常直接在命令上执行它们。例如,删除yel.dat内1至10行资料,并将其馀文字中的"yellow"字串改成"black"字串。此时,可将编辑指令直接在命令上执行,其命令如下:sed-e'1,10d'-e's/yellow/black/g'yel.dat在命令中,编辑指令'1,10d'(解[5])执行删除1至10行资料;编辑指令's/yellow/black/g'(解[6]),"yellow"字串替换(substuite)成"black"字串。2.2sed的编辑指令sed编辑指令的格式如下:[address1[,address2]]function[argument]其中,位址参数address1、address2为行数或regularexpression字串,表示所执行编辑的资料行;函数参数function[argument]为sed的内定函数,表示执行的编辑动作。下面两小节,将仔细介绍位址参数的表示法与有哪些函数参数供选择。2.2.1位址(address)参数的表示法实际上,位址参数表示法只是将要编辑的资料行,用它们的行数或其中的字串来代替表示它们。下面举几个例子说明(指令都以函数参数d(参照[section4.2])为例):删除档内第10行资料,则指令为10d。删除含有"man"字串的资料行时,则指令为/man/d。删除档内第10行到第200行资料,则指令为10,200d。删除档内第10行到含"man"字串的资料行,则指令为10,/man/d。接下来,以位址参数的内容与其个数两点,完整说明指令中位址参数的表示法(同样也以函数参数d为例)。位址参数的内容:位址为十进位数字:此数字表示行数。当指令执行时,将对符合此行数的资料执行函数参数指示的编辑动作。例如,删除资料档中的第15行资料,则指令为15d(参照[section4.2])。其馀类推,如删除资料档中的第m行资料,则指令为md。位址为regularexpression(参照[附录A]):当资料行中有符合regularexpression所表示的字串时,则执行函数参数指示的编辑动作。另外,在regularexpression前後必须加上"/"。例如指令为/t.*t/d,表示删除所有含两"t"字母的资料行。其中,"."表示任意字元;"*"表示其前字元可重任意次,它们结合".*"表示两"t"字母间的任意字串。位址参数的个数:在指令中,当没有位址参数时,表示全部资料行执行函数参数所指示的编辑动作;当只有一位址参数时,表示只有符合位址的资料行才编辑;当有两个位址参数,如address1,address2时,表示对资料区执行编辑,address1代表起始资料行,address2代表结束资料行。对於上述内容,以下面例子做具说明。例如指令为d其表示删除档内所有资料行。例如指令为5d其表示删除档内第五行资料。例如指令为1,/apple/d其表示删除资料区,由档内第一行至内有"apple"字串的资料行。例如指令为/apple/,/orange/d其表示删除资料区,由档内含有"apple"字串至含有"orange"字串的资料行2.2.2有那些函数(function)参数下页表中介绍所有sed的函数参数(参照[chapter4])的功能。函数参数功能:label建立scriptfile内指令互相参考的位置。
#####################################################
http://blog.csdn.net/wujiangguizhen/article/details/
原文地址:&作者:
1.创建文件夹#!/bin/shmkdir -m 777 "%%1"2.创建文件#!/bin/shtouch "%%1"3.删除文件#!/bin/shrm -if "%%1"4.删除文件夹#!/bin/shrm -rf "%%1"5.删除一个目录下所有的文件夹#!/bin/bashdirec="%%1" #$(pwd)for dir2del in $direc/* ; doif [ -d $dir2del ]; then& rm -rf $dir2delfidone6.清空文件夹#!/bin/bashdirec="%%1" #$(pwd)rm -if $direc/*for dir2del in $direc/* ; doif [ -d $dir2del ]; then& rm -rf $dir2delfidone7.读取文件#!/bin/sh7.1.操作系统默认编码cat "%%1" | doecho $done7.2.UTF-8编码cat "%%1" | doecho $done7.3.分块读取cat "%%1" | doecho $done8.写入文件#!/bin/shcat & "%%1" && EOF%%2EOFtee "%%1" & /dev/null && EOF%%2EOF#sed -i '$a %%2' %%29.写入随机文件#!/bin/shcat & "%%1" && EOF%%2EOFtee "%%1" & /dev/null && EOF%%2EOF#sed -i '$a %%2' %%210.读取文件属性#!/bin/bashfile=%%1file=${file:?'必须给出参数'}if [ ! -e $file ]; then&&& echo "$file 不存在"&&& exit 1fiif [ -d $file ]; then&&& echo "$file 是一个目录"&&& if [ -x $file ]; then&&&&&&& echo "可以"&&& else&&&&&&& echo "不可以"&&& fi&&& echo "对此进行搜索"&&elif [ -f $file ]; then&&& echo "$file 是一个正规文件"else&&& echo "$file不是一个正规文件"fiif [ -O $file ]; then&&& echo "你是$file的拥有者"else&&& echo "你不是$file的拥有者"fiif [ -r $file ]; then&&& echo "你对$file拥有"else&&& echo "你并不对$file拥有"fiecho "可读权限"if [ -w $file ]; then&&& echo "你对$file拥有"else&&& echo "你并不对$file拥有"fiecho "可写权限"if [ -x $file -a ! -d $file ]; then&&& echo "你拥有对$file"else&&& echo "你并不拥有对$file"fiecho "可执行的权限"11.写入文件属性#!/bin/bash#修改存放在ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs等文件系统上的文件或目录属性,使用权限超级用户。#一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多功能不能实现。同样-D检查压缩文件中的错误的功能,需要2.5.19以上内核才能支持。另外,通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。chattr [-RV] [-+=AacDdijsSu] [-v version] 文件或目录& -R:递归处理所有的文件及子目录。& -V:详细显示修改内容,并打印输出。& -:失效属性。& +:激活属性。& = :指定属性。& A:Atime,告诉系统不要修改对这个文件的最后访问时间。& S:Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。& a:Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。& i:Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。& D:检查压缩文件中的错误。& d:No dump,在进行文件系统备份时,dump程序将忽略这个文件。& C:Compress,系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘。& S:Secure Delete,让系统在删除这个文件时,使用0填充文件所在的区域。& u:Undelete,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件。12.枚举一个目录中的所有文件夹#!/bin/bashOLDIFS=$IFSIFS=:for path in $( find "%%1" -type d -printf "%p$IFS")do#"$path"doneIFS=$OLDIFS13.复制文件夹#!/bin/shcp -rf "%%1" "%%2"14.复制一个目录下所有的文件夹到另一个目录下#!/bin/bashdirec="%%1" #$(pwd)for dir2cp in $direc/* ; doif [ -d $dir2cp ]; then& cp $dir2cp "%%2"fidone15.移动文件夹#!/bin/shmv -rf "%%1" "%%2"16.移动一个目录下所有的文件夹到另一个目录下#!/bin/bashdirec="%%1" #$(pwd)for dir2mv in $direc/* ; doif [ -d $dir2mv ]; then& mv $dir2mv "%%2"fidone17.以一个文件夹的框架在另一个目录下创建文件夹和空文件#!/bin/bashdirec="%%1" #$(pwd)OLDIFS=$IFSIFS=:for path in $( find $direc -type d -printf "%p$IFS")domkdir -p "%%2/${path:${#direc}+1}"doneIFS=$OLDIFS#cp -a "%%1" "%%2"表达式 含义${#string}{#string}1,取得字符串长度string=abc&&&&&&&&& //等号二边不要有空格echo ${#string}&&&&&&&&&&&& //结果11expr length $string&&&&&&&& //结果11expr "$string" : ".*"&&&&&& //结果11 分号二边要有空格,这里的:根match的用法差不多2,字符串所在位置expr index $string '123'&&& //结果4 字符串对应的下标是从0开始的这个方法让我想起来了js的indexOf,各种语言对字符串的操作方法大方向都差不多,如果有语言基础的话,学习shell会很快的。3,从字符串开头到子串的最大长度expr match $string 'abc.*3' //结果9个人觉得这个函数的用处不大,为什么要从开头开始呢。4,字符串截取echo ${string:4}&&&&& //2342341& 从第4位开始截取后面所有字符串echo ${string:3:3}&&& //123&&&&& 从第3位开始截取后面3位echo ${string:3:6}&&& //123423&& 从第3位开始截取后面6位echo ${string: -4}&&& //2341& :右边有空格&& 截取后4位echo ${string:(-4)}&& //2341& 同上expr substr $string 3 3&& //123& 从第3位开始截取后面3位上面的方法让我想起了,php的substr函数,后面截取的规则是一样的。5,匹配显示内容//例3中也有match和这里的match不同,上面显示的是匹配字符的长度,而下面的是匹配的内容expr match $string '\([a-c]*[0-9]*\)'& //abcexpr $string : '\([a-c]*[0-9]\)'&&&&&& //abc1expr $string : '.*\([0-9][0-9][0-9]\)' //341 显示括号中匹配的内容这里括号的用法,是不是根其他的括号用法有相似之处呢,6,截取不匹配的内容echo ${string#a*3}&&&& //42341& 从$string左边开始,去掉最短匹配子串echo ${string#c*3}&&&& //abc& 这样什么也没有匹配到echo ${string#*c1*3}&& //42341& 从$string左边开始,去掉最短匹配子串echo ${string##a*3}&&& //41&&&& 从$string左边开始,去掉最长匹配子串echo ${string%3*1}&&&& //abc12342& 从$string右边开始,去掉最短匹配子串echo ${string%%3*1}&&& //abc12&&&& 从$string右边开始,去掉最长匹配子串这里要注意,必须从字符串的第一个字符开始,或者从最后一个开始,7,匹配并且替换echo ${string/23/bb}&& //abc1bb42341& 替换一次echo ${string//23/bb}& //abc1bb4bb41& 双斜杠替换所有匹配echo ${string/#abc/bb} //bb&& #以什么开头来匹配,根php中的^有点像echo ${string/%41/bb}& //abc123423bb& %以什么结尾来匹配,根php中的$有点像#!/bin/bashdirec=$(pwd)for file in "$(direc)/*"doif [ "${file##*.}" = "sh" ]; thenxterm -e bash $fileelif [ "${file##*.}" = "bin" ]; thenxterm -e $fileelif [ "${file##*.}" = "run" ]; thenxterm -e $fileelif [ "${file##*.}" = "bundle" ]; thenxterm -e $fileelif [ "${file##*.}" = "pl" ]; thenxterm -e perl $fileelif [ "${file##*.}" = "class" ]; thenxterm -e java ${file%.*}elif [ "${file##*.}" = "rpm" ]; thenxterm -e rpm -ivh $fileelif [ "${file##*.}" = "rb" ]; thenxterm -e ruby $fileelif [ "${file##*.}" = "py" ]; thenxterm -e python $fileelif [ "${file##*.}" = "jar" ]; thenxterm -e java -jar $filefidoneOLDIFS=$IFSIFS=:for path in $( find $direc -type d -printf "%p$IFS")dofor file in `ls $path`doif [ "${file##*.}" = "sh" ]; thenxterm -e bash """"$path"/"$file""""elif [ "${file##*.}" = "bin" ]; thenxterm -e """"$path"/"$file""""elif [ "${file##*.}" = "run" ]; thenxterm -e """"$path"/"$file""""elif [ "${file##*.}" = "bundle" ]; thenxterm -e """"$path"/"$file""""elif [ "${file##*.}" = "pl" ]; thenxterm -e perl """"$path"/"$file""""elif [ "${file##*.}" = "class" ]; thenxterm -e java """"$path"/"${file%.*}""""elif [ "${file##*.}" = "rpm" ]; thenxterm -e rpm -ivh """"$path"/"$file""""elif [ "${file##*.}" = "rb" ]; thenxterm -e ruby """"$path"/"$file""""elif [ "${file##*.}" = "py" ]; thenxterm -e python """"$path"/"$file""""elif [ "${file##*.}" = "jar" ]; thenxterm -e java -jar """"$path"/"$file""""fidonedoneIFS=$OLDIFS18.复制文件#!/bin/shcp %%1 %%219.复制一个目录下所有的文件到另一个目录#!/bin/bashdirec="%%1" $(pwd)for file in "$direc/*"docp "$file" "%%1"done20.提取扩展名#!/bin/sh%%2=${%%1##.}21.提取文件名#!/bin/sh%%2="$(basename %%1)"22.提取文件路径#!/bin/sh%%2="$(dirname %%1)"23.替换扩展名#!/bin/sh%%3="$(basename %%1)$%%2"24.追加路径#!/bin/sh%%3="$(dirname %%1)/$%%2"25.移动文件#!/bin/shmv "%%1" "%%2"26.移动一个目录下所有文件到另一个目录#!/bin/bashdirec="%%1" #$(pwd)OLDIFS=$IFSIFS=:for file in "$(direc)/*"domv "$file" "%%1"doneIFS=$OLDIFS27.指定目录下搜索文件#!/bin/shfind -name "%%1"28.打开文件对话框#!/bin/sh%%1="$(Xdialog --fselect '~/' 0 0 2&&1)"29.文件分割#!/bin/shsplit -b 2k "%%1"while read f1 f2 f3do&&& echo $f1 && f1&&& echo $f2 && f2&&& echo $f3 && f3done#!/bin/bash& linenum=`wc&& -l&& httperr8007.log|&& awk&& '{print&& $1}'`&&& n1=1&&& file=1&&& while&& [&& $n1&& -lt&& $linenum&& ]&&& do&&&&&&&&&&&&&&&&&&& n2=`expr&& $n1&& +&& 999`&&&&&&&&&&&&&&&&&&& sed&& -n&& "${n1},&& ${n2}p"&& httperr8007.log &&& file_$file.log&&&&&&&&&&&&&&&&&&&&& n1=`expr&& $n2&& +&& 1`&&&&&&&&&&&&&&&&&&& file=`expr&& $file&& +&& 1`&&& done&&其中httperr8007.log为你想分割的大文件,file_$file.log& 为分割后的文件,最后为file_1.log,file_2.log,file_3.log&&,分割完后的每个文件只有1000行(参数可以自己设置)split 参数:-b& :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等;-l& :以行数来进行分割;#按每个文件1000行来分割除split -l 1000 httperr8007.log httperrhttpaa,httpab,httpac ........#按照每个文件100K来分割split -b 100k httperr8007.log httphttpaa,httpab,httpac ........#!/bin/bashif [ $# -ne 2 ]; thenecho 'Usage: split file size(in bytes)'exitfifile=$1size=$2if [ ! -f $file ]; thenecho "$file doesn't exist"exitfi#TODO: test if $size is a valid integerfilesize=`/bin/ls -l $file | awk '{print $5}'`echo filesize: $filesizelet pieces=$filesize/$sizelet remain=$filesize-$pieces*$sizeif [ $remain -gt 0 ]; thenlet pieces=$pieces+1fiecho pieces: $piecesi=0while [ $i -lt $pieces ];doecho split: $file.$i:dd if=$file of=$file.$i bs=$size count=1 skip=$ilet i=$i+1doneecho "#!/bin/bash" & mergeecho "i=0" && mergeecho "while [ $i -lt $pieces ];" && mergeecho "do" && mergeecho " echo merge: $file.$i" && mergeecho " if [ ! -f $file.$i ]; then" && mergeecho " echo merge: $file.$i missed" && mergeecho " rm -f $file.merged" && mergeecho " exit" && mergeecho " fi" && mergeecho " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" && mergeecho " let i=$i+1" && mergeecho "done" && mergechmod u+x merge'30.文件合并#!/bin/shcp "%%1"+"%%2" "%%3"exec 3&f1exec 4&f2while read f1 &&3 && read f2 &&4do&&& echo $f1 $f2 && join.txtdone#!/bin/bashif [ $# -ne 2 ]; thenecho 'Usage: split file size(in bytes)'exitfifile=$1size=$2if [ ! -f $file ]; thenecho "$file doesn't exist"exitfi#TODO: test if $size is a valid integerfilesize=`/bin/ls -l $file | awk '{print $5}'`echo filesize: $filesizelet pieces=$filesize/$sizelet remain=$filesize-$pieces*$sizeif [ $remain -gt 0 ]; thenlet pieces=$pieces+1fiecho pieces: $piecesi=0while [ $i -lt $pieces ];doecho split: $file.$i:dd if=$file of=$file.$i bs=$size count=1 skip=$ilet i=$i+1doneecho "#!/bin/bash" & mergeecho "i=0" && mergeecho "while [ $i -lt $pieces ];" && mergeecho "do" && mergeecho " echo merge: $file.$i" && mergeecho " if [ ! -f $file.$i ]; then" && mergeecho " echo merge: $file.$i missed" && mergeecho " rm -f $file.merged" && mergeecho " exit" && mergeecho " fi" && mergeecho " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" && mergeecho " let i=$i+1" && mergeecho "done" && mergechmod u+x merge'31.文件简单加密#!/bin/bash#make test && make strings && sudo make installshc -r -f %%1.sh#%%1.x#%%1.x.c32.文件简单解密#!/bin/bash#make test && make strings && sudo make installshc -r -f %%1.sh#%%1.x#%%1.x.c33.读取ini文件属性#!/bin/bashif [ "$%%3" = "" ];then&& sed -n "/\[$%%2\]/,/\[.*\]/{&& /^\[.*\]/d&& /^[ ]*$/d&& s/;.*$//&& p&& }" $1elif [ "$%%4" = "" ];then&& sed -n "/\[$%%2\]/,/\[.*\]/{&& /^\[.*\]/d&& /^[ ]*$/d&& s/;.*$//&& s/^[ |&&&&&&& ]*$%%3[ | ]*=[ |&& ]*\(.*\)[ |&&&& ]*/\1/p&& }" $1else&&&&&& if [ "$%%4" = "#" ];then&&&&&&&&&&& sed "/\[$%%2\]/,/\[.*\]/{&&&&&&&&&&& s/^[ |&&&&&&& ]*$%%3[ |&&& ]*=.*/ /&&&&&&&&&&& }p" $1 & /tmp/sed$$&&&&&&&&&&& mv /tmp/sed$$ $1&&&&&& else&&&&&&&&&&& sed "/\[$2\]/,/\[.*\]/{&&&&&&&&&&& s/^[ |&&&&&&& ]*$%%3[ |&&& ]*=.*/$%%3=$%%4/&&&&&&&&&&& }p" $1 & /tmp/sed$$&&&&&&&&&&& mv /tmp/sed$$ $%%1&&&&&& fifi34.合并一个文件下所有的文件#!/bin/shcat $(ls |grep -E '%%1\.') & %%1#!/bin/bashOLDIFS=$IFSIFS=:for path in $( find %%1 -type d -printf "%p$IFS")dofor file in $path/*.c $path/*.cppdoif [[ ! "$file" =~ \*.[A-Za-z]+ ]]; then#"$(path)/$(file)"fidonedoneIFS=$OLDIFS#!/bin/bashcat &&'EOF'& combine.c#include&stdio.h&int main(){FILE *f1,*f2,*f3;f1=fopen("a1.txt","r");f2=fopen("a2.txt","r");f3=fopen("a3.txt","w");int a,b;a=getw(f1);&& /*从a1.txt和a2.txt中分别取最小的数a和b*/b=getw(f2);while(!feof(f1)&&!feof(f2))& /*两个文件都没结束时,执行循环、比较*/{if(a&=b){putw(a,f3);a=getw(f1);}else{putw(b,f3);b=getw(f2);}&& }if(feof(f1))& /*文件a1.txt结束时,把a2.txt中的数全部输入a3.txt*/{putw(b,f3);while((b=getw(f2))!=EOF)putw(b,f3);}if(feof(f2))&& /*同上*/{putw(a,f3);while((a=getw(f1))!=EOF)putw(a,f3);}fclose(f1);fclose(f2);fclose(f3);printf("已完成!");return 0;}EOFgcc -o combine combine.cif [ $? -eq 0 ]; then./combineelseecho 'Compile ERROR'fi35.写入ini文件属性#!/bin/bashif [ "$%%3" = "" ];then&& sed -n "/\[$%%2\]/,/\[.*\]/{&& /^\[.*\]/d&& /^[ ]*$/d&& s/;.*$//&& p&& }" $1elif [ "$%%4" = "" ];then&& sed -n "/\[$%%2\]/,/\[.*\]/{&& /^\[.*\]/d&& /^[ ]*$/d&& s/;.*$//&& s/^[ |&&&&&&& ]*$%%3[ | ]*=[ |&& ]*\(.*\)[ |&&&& ]*/\1/p&& }" $1else&&&&&& if [ "$%%4" = "#" ];then&&&&&&&&&&& sed "/\[$%%2\]/,/\[.*\]/{&&&&&&&&&&& s/^[ |&&&&&&& ]*$%%3[ |&&& ]*=.*/ /&&&&&&&&&&& }p" $1 & /tmp/sed$$&&&&&&&&&&& mv /tmp/sed$$ $%%1&&&&&& else&&&&&&&&&&& sed "/\[$%%2\]/,/\[.*\]/{&&&&&&&&&&& s/^[ |&&&&&&& ]*$%%3[ |&&& ]*=.*/$%%3=$%%4/&&&&&&&&&&& }p" $1 & /tmp/sed$$&&&&&&&&&&& mv /tmp/sed$$ $%%1&&&&&& fifi36.获得当前路径#!/bin/sh%%1=$(pwd)37.读取XML数据库如何通过shell命令行读取xml文件中某个属性所对应的值?例如:&key&BuildVersion&/key& &string&5&/string&我希望能够通过Unix shell命令对属性键的名称BuildVersion进行查询,返回的结果是5,如何实现呀?#!/bin/bashgrep BuildVersion|sed 's/.*&.*&\([^&].*\)&.*&.*/\1/'结果返回的是&BuildVersion&,而不是&5&,如果要查询BuildVersion自动返回数值5应当如何写?应该没错的。试一下: echo "&key&BuildVersion&/key& &string&5&/string&"|grep BuildVersion|sed 's/.*&.*&\([^&].*\)&.*&.*/\1/'我在SL的终端里试,返回值是5目前需要从xml文件提取数据,想做一个xmlparser.shxml 类似这样&result&&& &shareinfo hostip="192.168.0.1" sharename="abcd" password="abc123"&&/shareinfo&&/result&希望输入 xmlparser.sh a.xml hostip可以返回192.168.0.1#!/bin/shif [ $# -ne 2 ];then&& echo "Usage: $0 &xmlfile& &key&"&& exit 0figrep $2 $1|awk '{print $2}'|grep -o "[0-9.]*"把grep $2 $1|awk '{print $2}'|grep -o "[0-9.]*"改成grep $2 $1|awk '{print $2}'|grep -Eo "[0-9.]+"楼上这个有问题,如果我要得到的是&result&&& &shareinfo hostip="192.168.0.1" sharename="abcd" password="abc123"&&/shareinfo&&/result&中的sharename,那么,呵呵,就错了我觉得应该先定位到第二个参数&$2&的位置,然后再提取&=&后面的内容这里有个完整的实现:Parse Simple XML Files using Bash & Extract Name Value Pairs and Attributeshttp://www.humbug.in/2010/parse-simple-xml-files-using-bash-extract-name-value-pairs-and-attributes/不过需要安装xmllint.设计到对多个xml文件进行element的读取和列表。有人做过么?举个例子,多个xml文件里面都有&article&&&&&&&& &title&xxx&/titlel&&/article&通过shell读取,然后合并到一起,再生成一个新的xml,但是其他元素不变。&article&&&&&&&& &title&aaa&/titlel&&/article&&article&&&&&&&& &title&bbb&/titlel&&/article&如果格式异常简单,没有特例,那么可以用shell实现如果有可能格式复杂,因为shell的命令所使用的正则表达式都不支持跨行匹配,所以用shell来解决这个问题就绕圈子了。用perl来作这个工作最直接、简单。perl的XML:DOM模块是专门处理XML文件的。偶倒是觉得,用PHP写Scripts也很方便,功能强大,而且,跨平台,#!/bin/shsed -n '/&article&/{N;/\n[[:space:]]*&title&/{&&& N;&&& /&article&.*&\/article&/p&&& }D;n}'这小段代码能把一个xml文件中,你要的东西拿出来.你可以用for file in $*把这些信息都&&tmpfile中.然后用sed 在指定文件的指定位置用r命令把tmpfile粘贴进来~~~~大思路如此^_^& 我想有这个东西(只要能正确的跑出结果)后面就不难了吧...Namexmllint & command line XML toolSynopsisxmllint [[--version] | [--debug] | [--shell] | [--debugent] | [--copy] | [--recover] | [--noent] | [--noout] | [--nonet] | [--htmlout] | [--nowrap] | [--valid] | [--postvalid] | [--dtdvalid URL] | [--dtdvalidfpi FPI] | [--timing] | [--output file] | [--repeat] | [--insert] | [--compress] | [--html] | [--xmlout] | [--push] | [--memory] | [--maxmem nbbytes] | [--nowarning] | [--noblanks] | [--nocdata] | [--format] | [--encode encoding] | [--dropdtd] | [--nsclean] | [--testIO] | [--catalogs] | [--nocatalogs] | [--auto] | [--xinclude] | [--noxincludenode] | [--loaddtd] | [--dtdattr] | [--stream] | [--walker] | [--pattern patternvalue] | [--chkregister] | [--relaxng] | [--schema] | [--c14n]] [xmlfile]IntroductionThe xmllint program parses one or more XML files, specified on the command line as xmlfile. It prints various types of output, depending upon the options selected. It is useful for detecting errors both in XML code and in the XML parser itself.It is included in libxml2.Options--versionDisplay the version of libxml2 used.--debugParse a file and output an annotated tree of the in-memory version of the document.--shellRun a navigating shell. Details on available commands in shell mode are below.--debugentDebug the entities defined in the document.--copyTest the internal copy implementation.--recoverOutput any parsable portions of an invalid document.--noentSubstitute entity values for entity references. By default, xmllint leaves entity references in place.--nocdataSubstitute CDATA section by equivalent text nodes.--nscleanRemove redundant namespace declarations.--nooutSuppress output. By default, xmllint outputs the result tree.--htmloutOutput results as an HTML file. This causes xmllint to output the necessary HTML tags surrounding the result tree output so the results can be displayed in a browser.--nowrapDo not output HTML doc wrapper.--validDetermine if the document is a valid instance of the included Document Type Definition (DTD). A DTD to be validated against also can be specified at the command line using the --dtdvalid option. By default, xmllint also checks to determine if the document is well-formed.--postvalidValidate after parsing is completed.--dtdvalid URLUse the DTD specified by URL for validation.--dtdvalidfpi FPIUse the DTD specified by the Public Identifier FPI for validation, note that this will require a Catalog exporting that Public Identifier to work.--timingOutput information about the time it takes xmllint to perform the various steps.--output fileDefine a file path where xmllint will save the result of parsing. Usually the programs build a tree and save it on stdout, with this option the result XML instance will be saved onto a file.--repeatRepeat 100 times, for timing or profiling.--insertTest for valid insertions.--compressTurn on gzip compression of output.--htmlUse the HTML parser.--xmloutUsed in conjunction with --html. Usually when HTML is parsed the document is saved with the HTML serializer, but with this option the resulting document is saved with the XML serializer. This is primarily used to generate XHTML from HTML input.--pushUse the push mode of the parser.--memoryParse from memory.--maxmem nnbytesTest the parser memory support. nnbytes is the maximum number of bytes the library is allowed to allocate. This can also be used to make sure batch processing of XML files will not exhaust the virtual memory of the server running them.--nowarningDo not emit warnings from the parser and/or validator.--noblanksDrop ignorable blank spaces.--formatReformat and reindent the output. The $XMLLINT_INDENT environment variable controls the indentation (default value is two spaces " ").--testIOTest user input/output support.--encode encodingOutput in the given encoding.--catalogsUse the catalogs from $SGML_CATALOG_FILES. Otherwise /etc/xml/catalog is used by default.--nocatalogsDo not use any catalogs.--autoGenerate a small document for testing purposes.--xincludeDo XInclude processing.--noxincludenodeDo XInclude processing but do not generate XInclude start and end nodes.--loaddtdFetch external DTD.--dtdattrFetch external DTD and populate the tree with inherited attributes.--dropdtdRemove DTD from output.--streamUse streaming API - useful when used in combination with --relaxng or --valid options for validation of files that are too large to be held in memory.--walkerTest the walker module, which is a reader interface but for a document tree, instead of using the reader API on an unparsed document it works on a existing in-memory tree. Used in debugging.--chkregisterTurn on node registration. Useful for developers testing libxml2 node tracking code.--pattern patternvalueUsed to exercise the pattern recognition engine, which can be used with the reader interface to the parser. It allows to select some nodes in the document based on an XPath (subset) expression. Used for debugging.--relaxng schemaUse RelaxNG file named schema for validation.--schema schemaUse a W3C XML Schema file named schema for validation.--c14nUse the W3C XML Canonicalisation (C14N) to serialize the result of parsing to stdout. It keeps comments in the result.Shellxmllint offers an interactive shell mode invoked with the --shell command. Available commands in shell mode include:basedisplay XML base of the nodebyeleave shellcat nodeDisplay node if given or current node.cd pathChange the current node to path (if given and unique) or root if no argument given.dir pathDumps information about the node (namespace, attributes, content).du pathShow the structure of the subtree under path or the current node.exitLeave the shell.helpShow this help.freeDisplay memory usage.load nameLoad a new document with the given name.ls pathList contents of path (if given) or the current directory.pwdDisplay the path to the current node.quitLeave the shell.save nameSaves the current document to name if given or to the original name.validateCheck the document for error.write nameWrite the current node to the given filename.CatalogsCatalog behavior can be changed by redirecting queries to the user's own set of catalogs. This can be done by setting the XML_CATALOG_FILES environment variable to a list of catalogs. An empty one should deactivate loading the default /etc/xml/catalog default catalog.Debugging CatalogsSetting the environment variable XML_DEBUG_CATALOG using the command "export XML_DEBUG_CATALOG=" outputs debugging information related to catalog operations.Error Return CodesOn the completion of execution, Xmllint returns the following error codes:0No error1Unclassified2Error in DTD3Validation error4Validation error5Error in schema compilation6Error writing output7Error in pattern (generated when [--pattern] option is used)8Error in Reader registration (generated when [--chkregister] option is used)9Out of memory errorParse Simple XML Files using Bash & Extract Name Value Pairs and Attributes2 Comments1TweetPratik Sinha | July 31, 2010I have written up a simple routine par***ML to parse simple XML files to extract unique name values pairs and their attributes. The script extracts all xml tags of the format &abc arg1="hello"&xyz&/abc& and dynamically creates bash variables which hold values of the attributes as well as the elements. This is a good solution, if you don&t wish to use xpath for some simple xml files. However you will need xmllint installed on your system to use the script. Here&s a sample script which uses the par***ML function#!/bin/bashxmlFile=$1function par***ML() {& elemList=( $(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep -e "&/.*&$" | do \&&& echo $line | sed -e 's/^.*&\///' | cut -d '&' -f 1; \& done) )& totalNoOfTags=${#elemList[@]}; ((totalNoOfTags--))& suffix=$(echo ${elemList[$totalNoOfTags]} | tr -d '&/&')& suffix="${suffix}_"& for (( i = 0 ; i & ${#elemList[@]} ; i++ )); do&&& elem=${elemList[$i]}&&& elemLine=$(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep "&/$elem&")&&& echo $elemLine | grep -e "^&/[^ ]*&$" 1&/dev/null 2&&1&&& if [ "0" = "$?" ]; then&&&&& continue&&& fi&&& elemVal=$(echo $elemLine | tr '\011' '\040'| sed -e 's/^[ ]*//' -e 's/^&.*&\([^&].*\)&.*&$/\1/' | sed -e 's/^[ ]*//' | sed -e 's/[ ]*$//')&&& xmlElem="${suffix}$(echo $elem | sed 's/-/_/g')"&&& eval ${xmlElem}=`echo -ne \""${elemVal}"\"`&&& attrList=($(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep "&/$elem&" | tr '\011' '\040' | sed -e 's/^[ ]*//' | cut -d '&' -f 1& | sed -e 's/^&[^ ]*//' | tr "'" '"' | tr '"' '\n'& | tr '=' '\n' | sed -e 's/^[ ]*//' | sed '/^$/d' | tr '\011' '\040' | tr ' ' '&'))&&& for (( j = 0 ; j & ${#attrList[@]} ; j++ )); do&&&&& attr=${attrList[$j]}&&&&& ((j++))&&&&& attrVal=$(echo ${attrList[$j]} | tr '&' ' ')&&&&& attrName=`echo -ne ${xmlElem}_${attr}`&&&&& eval ${attrName}=`echo -ne \""${attrVal}"\"`&&& done& done}par***MLecho "$status_xyz |& $status_abc |& $status_pqr" #Variables for each& XML ELementecho "$status_xyz_arg1 |& $status_abc_arg2 |& $status_pqr_arg3 | $status_pqr_arg4" #Variables for each XML Attributeecho ""#All the variables that were produced by the par***ML functionset | /bin/grep -e "^$suffix"The XML File used for the above script example is:&?xml version="1.0"?&&status&& &xyz arg1="1"& a &/xyz&& &abc arg2="2"& p &/abc&& &pqr arg3="3" arg4="a phrase"& x &/pqr&&/status&The root tag, which in this case is &status&, is used as a suffix for all variables. Once the XML file is passed to the function, it dynamically creates the variables $status_xyz, $status_abc, $status_pqr, $status_xyz_arg1, $status_abc_arg2, $status_pqr_arg3 and $status_pqr_arg4.The output when the script is ran with the xml file as an argument is@$ bash& par***ML.sh test.xmla |& p |& x1 |& 2 |& 3 | a phrasestatus_abc=pstatus_abc_arg2=2status_pqr=xstatus_pqr_arg3=3status_pqr_arg4='a phrase'status_xyz=astatus_xyz_arg1=1This script won&t work for XML files like the one below with duplicate element names.&?xml version="1.0"?&&status&& &test arg1="1"& a &/test&& &test arg2="2"& p &/test&& &test arg3="3" arg4="a phrase"& x &/test&&/status&This script also won&t be able to extract attributes of elements without any CDATA. For eg, the script won&t be able to create variables corresponding to &test arg1="1"&. It will only create the variables corresponding to &test1 arg2="2"&abc&/test1&.&?xml version="1.0"?&&status&& &test arg1="1"&&&& &test1 arg2="2"&abc&/test1&& &/test&&/status&38.写入XML数据库#!/bin/bash39.ZIP压缩文件#!/bin/shzip -r "/%%1" "%%2"40.ZIP解压缩#!/bin/shunzip -x "/%%1" "%%2"41.获得应用程序完整路径#!/bin/bash42.ZIP压缩文件夹#!/bin/bash43.递归删除目录下的文件#!/bin/bashrm -if "%%1/*"OLDIFS=$IFSIFS=:for path in $( find %%1 -type d -printf "%p$IFS")dofor file in $path/*.c $path/*.cppdoif [[ ! "$file" =~ \*.[A-Za-z]+ ]]; then#"$(path)/$(file)"fidonedoneIFS=$OLDIFS44.IDEA加密算法#!/bin/bash45.RC6算法#!/bin/bashcat &&'EOF'& rc6.c#include&stdio.h&/* Timing data for RC6 (rc6.c)128 bit key:Key Setup:&&& 1632 cyclesEncrypt:&&&&&& 270 cycles =&&& 94.8 mbits/secDecrypt:&&&&&& 226 cycles =&& 113.3 mbits/secMean:&&&&&&&&& 248 cycles =&& 103.2 mbits/sec192 bit key:Key Setup:&&& 1885 cyclesEncrypt:&&&&&& 267 cycles =&&& 95.9 mbits/secDecrypt:&&&&&& 235 cycles =&& 108.9 mbits/secMean:&&&&&&&&& 251 cycles =&& 102.0 mbits/sec256 bit key:Key Setup:&&& 1877 cyclesEncrypt:&&&&&& 270 cycles =&&& 94.8 mbits/secDecrypt:&&&&&& 227 cycles =&& 112.8 mbits/secMean:&&&&&&&&& 249 cycles =&& 103.0 mbits/sec*/#include "../std_defs.h"static char *alg_name[] = { "rc6", "rc6.c", "rc6" };char **cipher_name(){&&& return alg_}#define f_rnd(i,a,b,c,d)&&&&&&&&&&&&&&&&&&& \&&&&&&& u = rotl(d * (d + d + 1), 5);&&&&&& \&&&&&&& t = rotl(b * (b + b + 1), 5);&&&&&& \&&&&&&& a = rotl(a ^ t, u) + l_&&&&& \&&&&&&& c = rotl(c ^ u, t) + l_key[i + 1]#define i_rnd(i,a,b,c,d)&&&&&&&&&&&&&&&&&&& \&&&&&&& u = rotl(d * (d + d + 1), 5);&&&&&& \&&&&&&& t = rotl(b * (b + b + 1), 5);&&&&&& \&&&&&&& c = rotr(c - l_key[i + 1], t) ^& \&&&&&&& a = rotr(a - l_key, u) ^ tu4byte& l_key[44];& /* storage for the key schedule&&&&&&&& *//* initialise the key schedule from the user supplied key&& */u4byte *set_key(const u4byte in_key[], const u4byte key_len){&& u4byte& i, j, k, a, b, l[8],&&& l_key[0] = 0xb7e15163;&&& for(k = 1; k & 44; ++k)&&&&&&&&&&&&&& l_key[k] = l_key[k - 1] + 0x9e3779b9;&&& for(k = 0; k & key_len / 32; ++k)&&&&&&& l[k] = in_key[k];&&& t = (key_len / 32) - 1; // t = (key_len / 32);&&& a = b = i = j = 0;&&& for(k = 0; k & 132; ++k)&&& {&& a = rotl(l_key + a + b, 3); b +=&&&&&&& b = rotl(l[j] + b, b);&&&&&&& l_key = l[j] =&&&&&&& i = (i == 43 ? 0 : i + 1); // i = (i + 1) % 44;&&&&&&&& j = (j == t ? 0 : j + 1);& // j = (j + 1) %&&& }&&& return l_};/* encrypt a block of text& */void encrypt(const u4byte in_blk[4], u4byte out_blk[4]){&& u4byte& a,b,c,d,t,u;&&& a = in_blk[0]; b = in_blk[1] + l_key[0];&&& c = in_blk[2]; d = in_blk[3] + l_key[1];&&& f_rnd( 2,a,b,c,d); f_rnd( 4,b,c,d,a);&&& f_rnd( 6,c,d,a,b); f_rnd( 8,d,a,b,c);&&& f_rnd(10,a,b,c,d); f_rnd(12,b,c,d,a);&&& f_rnd(14,c,d,a,b); f_rnd(16,d,a,b,c);&&& f_rnd(18,a,b,c,d); f_rnd(20,b,c,d,a);&&& f_rnd(22,c,d,a,b); f_rnd(24,d,a,b,c);&&& f_rnd(26,a,b,c,d); f_rnd(28,b,c,d,a);&&& f_rnd(30,c,d,a,b); f_rnd(32,d,a,b,c);&&& f_rnd(34,a,b,c,d); f_rnd(36,b,c,d,a);&&& f_rnd(38,c,d,a,b); f_rnd(40,d,a,b,c);&&& out_blk[0] = a + l_key[42]; out_blk[1] =&&& out_blk[2] = c + l_key[43]; out_blk[3] =};/* decrypt a block of text& */void decrypt(const u4byte in_blk[4], u4byte out_blk[4]){&& u4byte& a,b,c,d,t,u;&&& d = in_blk[3]; c = in_blk[2] - l_key[43];&&& b = in_blk[1]; a = in_blk[0] - l_key[42];&&& i_rnd(40,d,a,b,c); i_rnd(38,c,d,a,b);&&& i_rnd(36,b,c,d,a); i_rnd(34,a,b,c,d);&&& i_rnd(32,d,a,b,c); i_rnd(30,c,d,a,b);&&& i_rnd(28,b,c,d,a); i_rnd(26,a,b,c,d);&&& i_rnd(24,d,a,b,c); i_rnd(22,c,d,a,b);&&& i_rnd(20,b,c,d,a); i_rnd(18,a,b,c,d);&&& i_rnd(16,d,a,b,c); i_rnd(14,c,d,a,b);&&& i_rnd(12,b,c,d,a); i_rnd(10,a,b,c,d);&&& i_rnd( 8,d,a,b,c); i_rnd( 6,c,d,a,b);&&& i_rnd( 4,b,c,d,a); i_rnd( 2,a,b,c,d);&&& out_blk[3] = d - l_key[1]; out_blk[2] =&&& out_blk[1] = b - l_key[0]; out_blk[0] =};int main(){return 0;}EOFgcc -o rc6 rc6.cif [ $? -eq 0 ]; then./combineelseecho 'Compile ERROR'fi46.Grep#!/bin/bashgrep -qE %%1 %%247.直接创建多级目录#!/bin/bashmkdir -p %%148.批量重命名#!/bin/bashfind $PWD -type f -name '*\.cpp' |sed s/'\.cpp'//g|awk '{MV = "mv"};{C = "\.c"};{ CPP="\.cpp"}; {print MV, $1 CPP , $1 C}'|shls | awk -F '-' '{print "mv "$0" "$2}' #去掉带'-'的前缀49.文本查找替换#!/bin/bashsed -e 's:%%2:%%3:g' %%1#sed -e 's/%%2/%%3/g' %%150.文件关联#!/bin/bash51.批量转换编码从GB2312到Unicode#!/bin/bashscode="gbk"dcode="ucs2"for FILE in $(find $(pwd) -type f)doTMP_file=$(mktemp -p $(pwd))if [ -f $FILE ]; thenFright=$(stat -c %a $FILE)Fuser=$(stat -c %U $FILE)Fgrp=$(stat -c %G $FILE)iconv -f $scode -t $dcode $FILE -o $TMP_filemv $TMP_file $FILEchmod $Fright $FILEchown $Fuser.$Fgrp $FILEfidone52.设置JDK环境变量#!/bin/bashfind "$PWD" -type f \( -iname '*.bin' \) -print0 | xargs -0 chmod +xfind -type f \( -iname '*.bin' \) -print |while read filenamedo&&& case "$filename" in&&& *.bin)&&&&&&& xterm -e "$filename" && rm -if "$filename"&&&&&&& ;;&&& esacdoneOLDIFS=$IFSIFS=$'\n'for line in `cat ~/.bashrc`doif [[ "$line" =~ .*export.* ]]; then&&& if [[ "$line" =~ .*JAVA_HOME=.* ]]; then&&&&& if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]]; then&&&&&& javahome=$line&&&&& fi&&& fifiif [[ "$line" =~ export\ PATH=\$PATH:\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin$ ]];then&&& javapath=$linefiif [[ "$line" =~ export\ CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib$ ]];then&&& classpath=$linefidoneif [ ! -n "$javahome" ]; thensed -i '$a export JAVA_HOME='$(pwd)'/jdk1.6.0_25' ~/.bashrcelsesed -i 's:'${javahome//\\/\\\\}':export JAVA_HOME='$(pwd)'/jdk1.6.0_32:g' ~/.bashrcfiif [ ! -n "$javapath" ]; thensed -i '$a export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin' ~/.bashrcfiif [ ! -n "$classpath" ]; thensed -i '$a export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib' ~/.bashrcfiIFS=$OLDIFS#!/bin/bashshiftOLDIFS=$IFSIFS=$'\n'for line in `cat ~/TestBash.txt` #~/.bashrcdo& if [[ "$line" =~ .*export.* ]]; then&&& if [[ "$line" =~ export\ CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib$ ]]; then&&&&& classpath=$line&&& elif [[ "$line" =~ export\ PATH=\$PATH:\$CATALINA_HOME/bin$ ]]; then&&&&& jbosspath=$linefi&&& if [[ "$line" =~ .*JAVA_HOME=.* ]]; then&&&&& if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then&&&&&& javahome=$line&&&&& fi&&& elif [[ "$line" =~ .*CATALINA_HOME=.* ]];then&&&&& if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then&&&&&& catalinahome=$line&&&&& fi&&& elif [[ "$line" =~ .*TOMCAT_HOME=.* ]];then&&&&& if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then&&&&&& tomcathome=$line&&&&& fi&&& elif [[ "$line" =~ .*CATALINA_BASE=.* ]];then&&&&& if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then&&&&&& catalinabase=$line&&&&& fi&&& elif [[ "$line" =~ .*JBOSS_HOME=.* ]];then&&&&& if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then&&&&&& jbosshome=$line&&&&& fi&&& fi& elif [[ "$line" =~ ^PATH=\$PATH:\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin$ ]];then&&& javapath=$line& fi& if [[ "$line" =~ export\ CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib$ ]];then&&& classpath=$line& fi& if [[ "$line" =~ export\ PATH=\$PATH:\$JBOSS_HOME/bin$ ]];then&&& jbosspath=$line& fidoneif [ ! -n "$javahome" ]; thensed -i '$a export JAVA_HOME='$(pwd)'/jdk1.6.0_24' ~/TestBash.txt #~/.bashrcelsesed -i 's:'${javahome//\\/\\\\}':export JAVA_HOME='$(pwd)'/jdk1.6.0_24:g' ~/TestBash.txtfiif [ ! -n "$javapath" ]; thensed -i '$a PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin' ~/TestBash.txt #~/.bashrcfiif [ ! -n "$classpath" ]; thensed -i '$a export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib' ~/TestBash.txt #~/.bashrcfiif [ ! -n "$catalinahome" ]; thensed -i '$a export CATALINA_HOME='$(pwd) ~/TestBash.txt #~/.bashrcelsesed -i 's:'${catalinahome//\\/\\\\}':export CATALINA_HOME='$(pwd)':g' ~/TestBash.txtfiif [ ! -n "$tomcathome" ]; thensed -i '$a export TOMCAT_HOME='$(pwd) ~/TestBash.txt #~/.bashrcelsesed -i 's:'${tomcathome//\\/\\\\}':export TOMCAT_HOME='$(pwd)':g' ~/TestBash.txtfiif [ ! -n "$catalinabase" ]; thensed -i '$a export CATALINA_BASE='$(pwd) ~/TestBash.txt #~/.bashrcelsesed -i 's:'${catalinabase//\\/\\\\}':export CATALINA_BASE='$(pwd)':g' ~/TestBash.txtfiif [ ! -n "$jbosshome" ]; thensed -i '$a export JBOSS_HOME='$(pwd) ~/TestBash.txt #~/.bashrcelsesed -i 's:'${jbosshome//\\/\\\\}':export JBOSS_HOME='$(pwd)':g' ~/TestBash.txtfiif [ ! -n "$jbosspath" ]; thensed -i '$a export PATH=$PATH:$CATALINA_HOME/bin' ~/TestBash.txt #~/.bashrcfiIFS=$OLDIFS53.批量转换编码从Unicode到GB2312#!/bin/bashscode="ucs2"dcode="gbk"for FILE in $(find $(pwd) -type f)doTMP_file=$(mktemp -p $(pwd))if [ -f $FILE ]; thenFright=$(stat -c %a $FILE)Fuser=$(stat -c %U $FILE)Fgrp=$(stat -c %G $FILE)iconv -f $scode -t $dcode $FILE -o $TMP_filemv $TMP_file $FILEchmod $Fright $FILEchown $Fuser.$Fgrp $FILEfidone54.删除空文件夹#!/bin/bashrmdir -p %%155.GB2312文件转UTF-8格式#!/bin/bashiconv -f gbk -t utf8 %%1 -o %%256.UTF-8文件转GB2312格式#!/bin/bashiconv -f utf8 -t& gbk %%1 -o %%257.获取文件路径的父路径#!/bin/bash%%1=basename $PWD58.Unicode文件转UTF-8格式#!/bin/bashiconv -f ucs2 -t& utf-8 %%1 -o %%259.CRC循环冗余校验#!/bin/bashcat &&'EOF'& crc.c#include&stdio.h&unsigned long int crc32_table[256];&unsigned long int ulPolynomial = 0x04c11db7;&unsigned long int Reflect(unsigned long int ref, char ch)&& {&&&& unsigned long int value(0);&&&&&&&& // 交换bit0和bit7,bit1和bit6,类推&&&&&&&& for(int i = 1; i & (ch + 1); i++)&&&&&&&&& {&&&&&&&&&&& if(ref & 1)&&&&&&&&&&&&&&&&&&&&&& value |= 1 && (ch - i);&&&&&&&&&&&&&&&&&&& ref &&= 1;&&&&& }&&&&&&&&&}&init_crc32_table()&& {&&&& unsigned long int crc,&&&&&&&& // 256个值&&&&&&&& for(int i = 0; i &= 0xFF; i++)&&&&&&&&& {&& temp=Reflect(i, 8);&&&&&&&&&&&&&&& crc32_table[i]= temp&& 24;&&&&&&&&&&&&&&&& for (int j = 0; j & 8; j++){&&&&&&&&&&&&& unsigned long int t1,t2;&& unsigned long int flag=crc32_table[i]&0x;&&&&&&&&&&&&&&&& t1=(crc32_table[i] && 1);&&&&&&&&&&&&&&&& if(flag==0)&&&&&&&&&&&&&&&&&& t2=0;&&&&&&&&&&&&&&&& else&&&&&&&&&&&&&&&&&& t2=ulP&&&&&&&&&&&&&&&& crc32_table[i] =t1^t2 ;&&&&&&& }&&&&&&&&&&&&&&& crc=crc32_table[i];&&&&&&&&&&&&&&& crc32_table[i] = Reflect(crc32_table[i], 32);&&&&&&&& }}unsigned long GenerateCRC32(char xdata * DataBuf,unsigned long& len)&& {&&&&&&&& unsigned long oldcrc32;&&&&&&&& unsigned long crc32;&&&&&&&& &&&&&&&& unsigned&&&&&&&&&& char c,t;&&&&&&&& oldcrc32 = 0x; //初值为0&&&&& charcnt=0;&&&&&&&&& while (len--) {&&&&&&&&&&&&&&&&& t= (oldcrc32 && 24) & 0xFF;&& //要移出的字节的值&&&&& oldcrc=crc_32_tab[t];&&&&&&&& //根据移出的字节的值查表&&&&&&&&&&&&&&&&& c=DataBuf[charcnt];&&&&&&&&& //新移进来的字节值&&&&&&&&&&&&&&&&& oldcrc32= (oldcrc32 && 8) |&& //将新移进来的字节值添在寄存器末字节中&&&&&&&&&&&&&&&&& oldcrc32=oldcrc32^&&&& //将寄存器与查出的值进行xor运算&&&&&&&&&&&&&&&&& charcnt++;&&&&&&&& }&&&&&&&&& crc32=oldcrc32;&&&&&&&&& return crc32;&}&参数表可以先在PC机上算出来,也可在程序初始化时完成。下面是用于计算参数表的c语言子程序,在Visual C++ 6.0下编译通过。&#include &stdio.h&&unsigned long int crc32_table[256];&unsigned long int ulPolynomial = 0x04c11db7;&unsigned long int Reflect(unsigned long int ref, char ch)&& {&&&& unsigned long int value(0);&&&&&&&& // 交换bit0和bit7,bit1和bit6,类推&&&&&&&& for(int i = 1; i & (ch + 1); i++)&&&&&&&&& {&&&&&&&&&&& if(ref & 1)&&&&&&&&&&&&&&&&&&&&&& value |= 1 && (ch - i);&&&&&&&&&&&&&&&&&&& ref &&= 1;&&&&& }&&&&&&&&&}int main(){&&&& unsigned long int crc,&&&&&&&& // 256个值&&&&&&&& for(int i = 0; i &= 0xFF; i++)&&&&&&&&& {temp=Reflect(i, 8);&&&&&&&&&&&&&& crc32_table[i]= temp&& 24;&&&&&&&&&&&&&&&& for (int j = 0; j & 8; j++){&&&&&&&&&&&&& unsigned long int t1,t2;&& unsigned long int flag=crc32_table[i]&0x;&&&&&&&&&&&&&&& t1=(crc32_table[i] && 1);&&&&&&&&&&&&&&&& if(flag==0)&&&&&&&&&&&&&&&&&& t2=0;&&&&&&&&&&&&&&&& else&&&&&&&&&&&&&&&&&& t2=ulP&&&&&&&&&&&&&&&& crc32_table[i] =t1^t2 ;&&&&&&&}&&&&&&&&&&&&&&& crc=crc32_table[i];&&&&&&&&&&&&&& crc32_table[i] = Reflect(crc32_table[i], 32);&&&&&&& }return 0;}EOFgcc -o crc crc.cif [ $? -eq 0 ]; then./combineelseecho 'Compile ERROR'fi60.判断是否为空文件#!/bin/bash61.终止程序#!/bin/shkill -KILL pidof %%1 -s#killall %%162.定时关机#!/bin/shshutdown -h %%1 & #23:00#shutdown -h now#halt#/sbin/poweroff#init 063.显示进程列表#!/bin/shps aux#fuser -l64.遍历文件夹列出文件大小#!/bin/shdu -sH "%%1/*"65.GOST算法#!/bin/bash66.对目标压缩文件解压缩到指定文件夹#!/bin/bash67.保存文件时重名自动生成新文件#!/bin/bash68.打开网页#!/bin/shlynx %%169.删除空文件夹整合操作#!/bin/bash70.获取磁盘所有分区#!/bin/shdf -k71.激活一个程序或程序关联的文件#!/bin/bash72.MP3播放#!/bin/shamp "%%1"73.WAV播放#!/bin/shamp "%%1"74.写图像到剪切板#!/bin/bash75.从剪贴板复制图像到窗体#!/bin/bash76.删除文件夹下的所有文件且不删除文件夹下的文件夹#!/bin/shrm -if "%%1/*"77.XML遍历结点属性值#!/bin/bash78.Unicode文件转GB2312格式#!/bin/shiconv -f ucs2 -t& gbk %%1 -o %%279.开源程序库Xercesc-C++代码工程中内联80.提取包含头文件列表#!/bin/bash81.GB2312文件转Unicode格式#!/bin/shiconv -f gbk -t& ucs2 %%1 -o %%282.Java程序打包#!/bin/bash83.UTF-8文件转Unicode格式#!/bin/bashiconv -f utf8 -t& ucs2 %%1 -o %%284.创建PDF文档#!/bin/bash85.创建Word文档#!/bin/bash86.快速高效的文件加密#!/bin/bash87.从CSV文件构造XML文档#!/bin/bash88.从XML文档生成CSV文件#!/bin/bash89.模拟键盘输入字符串#!/bin/bash90.提取PDF文件中的文本#!/bin/bash91.操作内存映射文件#!/bin/bash91.1发送内存映射数据#!/bin/bash91.2接收内存映射数据#!/bin/bash92.重定向windows控制台程序的输出信息#!/bin/bash93.基数转序数#!/bin/bash94.数字月份转英文#!/bin/bash95.报表相关#!/bin/bash96.根据进程名获取进程ID#!/bin/bashpidof %%1 -s96.BCP导入#!/bin/bash97.BCP导出#!/bin/bash98.计算文件MD5值#!/bin/bashmd5sum "%%1"99.计算获取文件夹中文件的MD5值#!/bin/bash100.复制一个目录下所有文件到一个文件夹中#!/bin/bashcp $(find "%%1" -name *.*) "%%2"101.移动一个目录下所有文件到一个文件夹中#!/bin/bashmv $(find "%%1" -name *.*) "%%2"102.文件RSA高级加密十进制到十六进制typeset -i16 BASE_16_NUMBASE_16_NUM=%%1echo $BASE_16_NUM八进制到十六进制#!/bin/bashtypeset -i16 BASE_16_NUMBASE_16_NUM=8#%%1echo $BASE_16_NUM十进制到八进制#!/bin/bashprintf %o %%1; echo十进制到十六进制#!/bin/bashprintf %x %%1; echo103.计算文件大小#!/bin/bashwc "%%1"104.计算文件夹的大小#!/sbin/kshdir=%%1(cd $pwd)find $dir -type d -print | du | awk '{print $2, "== ("$1/2"kb)"}' |sort -f |sed -e "s,[^ /]*/([^ /]*) ==,|--1," -e"s,[^ /]*/,| ,g"105.快速获得当前程序的驱动器、路径、文件名和扩展名106.磁盘剩余空间计算#!/bin/bashdf -k107.获取当前程序进程ID#!/bin/bashpidof %%1 -s108.全盘搜索文件#!/bin/bash#updatedb#locate %%1slocate %%1109.获得当前登录的用户名#!/bin/bashwhoami110.获得所有用户名#!/bin/bashwho111.创建MySQL管理用户#!/bin/bashmysqladmin -u root password %%1112.管理MySQL数据库服务器#!/bin/bash112.1.启动MySQL数据库服务器mysqld -console112.2.登录MySQL数据库服务器112.2.1.登录本地MySQL数据库服务器mysql -uroot -p%%1112.2.2.登录远程MySQL数据库服务器mysql -h %%1 -u %%2 -p%%3112.3.关闭MySQL数据库服务器mysqladmin -u root shutdown#pkill -9 mysql112.4.测试MySQL数据库服务器mysqlshow || mysqlshow -u root mysql || mysqladmin version status || mysql test113.MySQL执行查询#!/bin/shmysqladmin -u %%1 -p%%2 SELECT * INTO OUTFILE './bestlovesky.xls' FROM bestl}

我要回帖

更多关于 t161列车经过站点 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信