linux sed使用

转载地址:https://www.cnblogs.com/taosim/articles/3761007.html

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<这是一个由shell创建的文件
this is a file created by shell.
we want to make a good world.
EOF

其中,<

cat>test1<

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-191373-187668.html

ctags:  linux perl shell perl  vi grep awk xargs  批量替换

方法1:
 
这两天在构建一个应用的使用用到了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'
 
方法2:

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 ./`

方法3:

在日程的开发过程中,可能大家会遇到将某个变量名修改 为另一个变量名的情况,如果这个变量是一个局部变量的话,vi足以胜任,但是如果是某个全局变量的话,并且在很多文件中进行了使用,这个时候使用vi就是 一个不明智的选择。这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改:
grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'


from: http://blog.zol.com.cn/1395/article_1394052.html

补充说明
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/2013/01/13/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 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 1020 行之间进行的,则『 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
drink tea
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'
1  root:x:0:0:root:/root:/bin/bash
1  root:x:0:0:root:/root:/bin/bash
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
4  sys:x:3:3:sys:/dev:/bin/sh
5  sync:x:4:65534:sync:/bin:/bin/sync
....下面忽略 
复制代码
复制代码

如果root找到,除了输出所有行,还会输出匹配行。

 

使用-n的时候将只打印包含模板的行。

nl /etc/passwd | sed -n '/root/p'
1  root:x:0:0:root:/root:/bin/bash

 

数据的搜寻并删除

删除/etc/passwd所有包含root的行,其他行输出

nl /etc/passwd | sed  '/root/d'
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  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}'    
1  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/'
1  root:x:0:0:root:/root:/bin/blueshell
2  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://vbird.dic.ksu.edu.tw/linux_basic/0330regularex_2.php#sed

       http://www.cnblogs.com/stephen-liu74/archive/2011/11/17/2245130.html

 ==================

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为指定行号
x,y 指定从x到y的行号范围
/pattern/ 查询包含模式的行
/pattern/pattern/ 查询包含两个模式的行
/pattern/,x 从与pattern的匹配行到x号行之间的行
x,/pattern/ 从x号行到与pattern的匹配行之间的行
x,y! 查询不包含x和y行号的行

 

===================================分割线=======================

sed编辑命令表

选项 意义
p 打印匹配行
= 打印匹配行号
a\ 在定位行之后追加文本信息
i\ 在定位行之前插入文本信息
d 删除定位行
c\ 用新文本替换定位行
s 使用替换模式替换相应的模式
r 从另一个文件中读文本
w 将文本写入到另一个文件中
y 变换字符
q 第一个模式匹配完成后退出
l 显示与八进制ASCII码等价的控制字符
{} 在定位行执行的命令组
n 读取下一个输入行,用下一个命令处理新的行
h 将模式缓存区的文本复制到保持缓存区
H 将模式缓存区的文本追加到保持缓存区
x 互换模式缓存区和保持缓存区的内容
g 将保持缓存区的内容复制到模式缓存区
G 将保持缓存区的内容追加到模式缓存区

 

========================分割线============================

各个选项和编辑命令详解:

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的脚本:

Sed代码   收藏代码
  1. #!/bin/sed -f  
  2. /file:/a\  
  3. We append a new line.\  
  4. 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 -> 打印空行

3. !符号

!表示取反,也就是不满足条件的时候就处理

# 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代码   收藏代码
  1. #!/bin/sed -f   
  2. # this is comment  
  3. # date : 2013/06/02  
  4. # author : xiongneng  
  5. /this is/i\  
  6. 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-2051464-1-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/1234567890/ABCDEFGHIJ/' test_sed
sed 'y/1234567890/ABCDEFGHIJ/' filename
ABCDEFGHIJ
BCDEFGHIJA
CDEFGHIJAB
DEFGHIJABC
注意变换关系是按两个list的位置对应变换

其中:test_sed的内容是:
1234567890
2345678901
3456789012
4567890123


(2)
替换每行所有匹配
sed 's/01/Ab/g' test_sed
1234567890
23456789Ab
3456789Ab2
456789Ab23

注意:第一行的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/{ n; 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下所有文件中的www.itbbs.cn为chinafar.com

sed -i "s/www.itbbs.cn/chinafar.com/g" `grep www.itbbs.cn -rl /home` 

二、下面这条命令:
perl -pi -e 's|ABCD|Linux|g' `find ./ -type f`
将调用perl执行一条替换命令,把find命令找到的所有文件内容中的ABCD替换为Linux

find ./ -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/12458119

原文地址:Linux中shell文件操作大全 作者:fuliangcheng

1.创建文件夹
#!/bin/sh
mkdir -m 777 "%%1"

2.创建文件
#!/bin/sh
touch "%%1"

3.删除文件
#!/bin/sh
rm -if "%%1"

4.删除文件夹
#!/bin/sh
rm -rf "%%1"

5.删除一个目录下所有的文件夹
#!/bin/bash
direc="%%1" #$(pwd)
for dir2del in $direc/* ; do
if [ -d $dir2del ]; then
  rm -rf $dir2del
fi
done

6.清空文件夹
#!/bin/bash
direc="%%1" #$(pwd)
rm -if $direc/*
for dir2del in $direc/* ; do
if [ -d $dir2del ]; then
  rm -rf $dir2del
fi
done

7.读取文件
#!/bin/sh
7.1.操作系统默认编码
cat "%%1" | while read line; do
echo $line;
done

7.2.UTF-8编码
cat "%%1" | while read line; do
echo $line;
done

7.3.分块读取
cat "%%1" | while read line; do
echo $line;
done

8.写入文件
#!/bin/sh
cat > "%%1" << EOF
%%2
EOF

tee "%%1" > /dev/null << EOF
%%2
EOF

#sed -i '$a %%2' %%2

9.写入随机文件
#!/bin/sh
cat > "%%1" << EOF
%%2
EOF

tee "%%1" > /dev/null << EOF
%%2
EOF

#sed -i '$a %%2' %%2

10.读取文件属性
#!/bin/bash
file=%%1
file=${file:?'必须给出参数'}
if [ ! -e $file ]; then
    echo "$file 不存在"
    exit 1
fi
if [ -d $file ]; then
    echo "$file 是一个目录"
    if [ -x $file ]; then
        echo "可以"
    else
        echo "不可以"
    fi
    echo "对此进行搜索"  
elif [ -f $file ]; then
    echo "$file 是一个正规文件"
else
    echo "$file不是一个正规文件"
fi
if [ -O $file ]; then
    echo "你是$file的拥有者"
else
    echo "你不是$file的拥有者"
fi
if [ -r $file ]; then
    echo "你对$file拥有"
else
    echo "你并不对$file拥有"
fi
echo "可读权限"
if [ -w $file ]; then
    echo "你对$file拥有"
else
    echo "你并不对$file拥有"
fi
echo "可写权限"
if [ -x $file -a ! -d $file ]; then
    echo "你拥有对$file"
else
    echo "你并不拥有对$file"
fi
echo "可执行的权限"

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/bash
OLDIFS=$IFS
IFS=:
for path in $( find "%%1" -type d -printf "%p$IFS")
do
#"$path"
done
IFS=$OLDIFS

13.复制文件夹
#!/bin/sh
cp -rf "%%1" "%%2"

14.复制一个目录下所有的文件夹到另一个目录下
#!/bin/bash
direc="%%1" #$(pwd)
for dir2cp in $direc/* ; do
if [ -d $dir2cp ]; then
  cp $dir2cp "%%2"
fi
done

15.移动文件夹
#!/bin/sh
mv -rf "%%1" "%%2"

16.移动一个目录下所有的文件夹到另一个目录下
#!/bin/bash
direc="%%1" #$(pwd)
for dir2mv in $direc/* ; do
if [ -d $dir2mv ]; then
  mv $dir2mv "%%2"
fi
done

17.以一个文件夹的框架在另一个目录下创建文件夹和空文件
#!/bin/bash
direc="%%1" #$(pwd)
OLDIFS=$IFS
IFS=:
for path in $( find $direc -type d -printf "%p$IFS")
do
mkdir -p "%%2/${path:${#direc}+1}"
done
IFS=$OLDIFS
#cp -a "%%1" "%%2"

表达式 含义
${#string}
{#string}
1,取得字符串长度
string=abc12342341          //等号二边不要有空格
echo ${#string}             //结果11
expr length $string         //结果11
expr "$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]*\)'  //abc12342341
expr $string : '\([a-c]*[0-9]\)'       //abc1
expr $string : '.*\([0-9][0-9][0-9]\)' //341 显示括号中匹配的内容这里括号的用法,是不是根其他的括号用法有相似之处呢,
6,截取不匹配的内容
echo ${string#a*3}     //42341  从$string左边开始,去掉最短匹配子串
echo ${string#c*3}     //abc12342341  这样什么也没有匹配到
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} //bb12342341   #以什么开头来匹配,根php中的^有点像
echo ${string/%41/bb}  //abc123423bb  %以什么结尾来匹配,根php中的$有点像

#!/bin/bash
direc=$(pwd)
for file in "$(direc)/*"
do
if [ "${file##*.}" = "sh" ]; then
xterm -e bash $file
elif [ "${file##*.}" = "bin" ]; then
xterm -e $file
elif [ "${file##*.}" = "run" ]; then
xterm -e $file
elif [ "${file##*.}" = "bundle" ]; then
xterm -e $file
elif [ "${file##*.}" = "pl" ]; then
xterm -e perl $file
elif [ "${file##*.}" = "class" ]; then
xterm -e java ${file%.*}
elif [ "${file##*.}" = "rpm" ]; then
xterm -e rpm -ivh $file
elif [ "${file##*.}" = "rb" ]; then
xterm -e ruby $file
elif [ "${file##*.}" = "py" ]; then
xterm -e python $file
elif [ "${file##*.}" = "jar" ]; then
xterm -e java -jar $file
fi
done
OLDIFS=$IFS
IFS=:
for path in $( find $direc -type d -printf "%p$IFS")
do
for file in `ls $path`
do
if [ "${file##*.}" = "sh" ]; then
xterm -e bash """"$path"/"$file""""
elif [ "${file##*.}" = "bin" ]; then
xterm -e """"$path"/"$file""""
elif [ "${file##*.}" = "run" ]; then
xterm -e """"$path"/"$file""""
elif [ "${file##*.}" = "bundle" ]; then
xterm -e """"$path"/"$file""""
elif [ "${file##*.}" = "pl" ]; then
xterm -e perl """"$path"/"$file""""
elif [ "${file##*.}" = "class" ]; then
xterm -e java """"$path"/"${file%.*}""""
elif [ "${file##*.}" = "rpm" ]; then
xterm -e rpm -ivh """"$path"/"$file""""
elif [ "${file##*.}" = "rb" ]; then
xterm -e ruby """"$path"/"$file""""
elif [ "${file##*.}" = "py" ]; then
xterm -e python """"$path"/"$file""""
elif [ "${file##*.}" = "jar" ]; then
xterm -e java -jar """"$path"/"$file""""
fi
done
done
IFS=$OLDIFS

18.复制文件
#!/bin/sh
cp %%1 %%2

19.复制一个目录下所有的文件到另一个目录
#!/bin/bash
direc="%%1" $(pwd)
for file in "$direc/*"
do
cp "$file" "%%1"
done

20.提取扩展名
#!/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/sh
mv "%%1" "%%2"

26.移动一个目录下所有文件到另一个目录
#!/bin/bash
direc="%%1" #$(pwd)
OLDIFS=$IFS
IFS=:
for file in "$(direc)/*"
do
mv "$file" "%%1"
done
IFS=$OLDIFS

27.指定目录下搜索文件
#!/bin/sh
find -name "%%1"

28.打开文件对话框
#!/bin/sh
%%1="$(Xdialog --fselect '~/' 0 0 2>&1)"

29.文件分割
#!/bin/sh
split -b 2k "%%1"

while read f1 f2 f3
do
    echo $f1 >> f1
    echo $f2 >> f2
    echo $f3 >> f3
done


#!/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 httperr

httpaa,httpab,httpac ........

#按照每个文件100K来分割

split -b 100k httperr8007.log http

httpaa,httpab,httpac ........

#!/bin/bash
if [ $# -ne 2 ]; then
echo 'Usage: split file size(in bytes)'
exit
fi

file=$1
size=$2

if [ ! -f $file ]; then
echo "$file doesn't exist"
exit
fi

#TODO: test if $size is a valid integer

filesize=`/bin/ls -l $file | awk '{print $5}'`
echo filesize: $filesize

let pieces=$filesize/$size
let remain=$filesize-$pieces*$size
if [ $remain -gt 0 ]; then
let pieces=$pieces+1
fi
echo pieces: $pieces

i=0
while [ $i -lt $pieces ];
do
echo split: $file.$i:
dd if=$file of=$file.$i bs=$size count=1 skip=$i
let i=$i+1
done

echo "#!/bin/bash" > merge

echo "i=0" >> merge
echo "while [ $i -lt $pieces ];" >> merge
echo "do" >> merge
echo " echo merge: $file.$i" >> merge
echo " if [ ! -f $file.$i ]; then" >> merge
echo " echo merge: $file.$i missed" >> merge
echo " rm -f $file.merged" >> merge
echo " exit" >> merge
echo " fi" >> merge
echo " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >> merge
echo " let i=$i+1" >> merge
echo "done" >> merge
chmod u+x merge'

30.文件合并
#!/bin/sh
cp "%%1"+"%%2" "%%3"

exec 3exec 4while read f1 <&3 && read f2 <&4
do
    echo $f1 $f2 >> join.txt
done

#!/bin/bash
if [ $# -ne 2 ]; then
echo 'Usage: split file size(in bytes)'
exit
fi

file=$1
size=$2

if [ ! -f $file ]; then
echo "$file doesn't exist"
exit
fi

#TODO: test if $size is a valid integer

filesize=`/bin/ls -l $file | awk '{print $5}'`
echo filesize: $filesize

let pieces=$filesize/$size
let remain=$filesize-$pieces*$size
if [ $remain -gt 0 ]; then
let pieces=$pieces+1
fi
echo pieces: $pieces

i=0
while [ $i -lt $pieces ];
do
echo split: $file.$i:
dd if=$file of=$file.$i bs=$size count=1 skip=$i
let i=$i+1
done

echo "#!/bin/bash" > merge

echo "i=0" >> merge
echo "while [ $i -lt $pieces ];" >> merge
echo "do" >> merge
echo " echo merge: $file.$i" >> merge
echo " if [ ! -f $file.$i ]; then" >> merge
echo " echo merge: $file.$i missed" >> merge
echo " rm -f $file.merged" >> merge
echo " exit" >> merge
echo " fi" >> merge
echo " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >> merge
echo " let i=$i+1" >> merge
echo "done" >> merge
chmod u+x merge'

31.文件简单加密
#!/bin/bash
#make test && make strings && sudo make install
shc -r -f %%1.sh
#%%1.x
#%%1.x.c

32.文件简单解密
#!/bin/bash
#make test && make strings && sudo make install
shc -r -f %%1.sh
#%%1.x
#%%1.x.c

33.读取ini文件属性
#!/bin/bash
if [ "$%%3" = "" ];then
   sed -n "/\[$%%2\]/,/\[.*\]/{
   /^\[.*\]/d
   /^[ ]*$/d
   s/;.*$//
   p
   }" $1
elif [ "$%%4" = "" ];then
   sed -n "/\[$%%2\]/,/\[.*\]/{
   /^\[.*\]/d
   /^[ ]*$/d
   s/;.*$//
   s/^[ |        ]*$%%3[ | ]*=[ |   ]*\(.*\)[ |     ]*/\1/p
   }" $1
else
       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
       fi
fi

34.合并一个文件下所有的文件
#!/bin/sh
cat $(ls |grep -E '%%1\.') > %%1

#!/bin/bash
OLDIFS=$IFS
IFS=:
for path in $( find %%1 -type d -printf "%p$IFS")
do
for file in $path/*.c $path/*.cpp
do
if [[ ! "$file" =~ \*.[A-Za-z]+ ]]; then
#"$(path)/$(file)"
fi
done
done
IFS=$OLDIFS

#!/bin/bash
cat <<'EOF'> combine.c
#include
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;
}
EOF
gcc -o combine combine.c
if [ $? -eq 0 ]; then
./combine
else
echo 'Compile ERROR'
fi

35.写入ini文件属性
#!/bin/bash
if [ "$%%3" = "" ];then
   sed -n "/\[$%%2\]/,/\[.*\]/{
   /^\[.*\]/d
   /^[ ]*$/d
   s/;.*$//
   p
   }" $1
elif [ "$%%4" = "" ];then
   sed -n "/\[$%%2\]/,/\[.*\]/{
   /^\[.*\]/d
   /^[ ]*$/d
   s/;.*$//
   s/^[ |        ]*$%%3[ | ]*=[ |   ]*\(.*\)[ |     ]*/\1/p
   }" $1
else
       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
       fi
fi

36.获得当前路径
#!/bin/sh
%%1=$(pwd)

37.读取XML数据库

如何通过shell命令行读取xml文件中某个属性所对应的值?
例如:
BuildVersion 5
我希望能够通过Unix shell命令对属性键的名称BuildVersion进行查询,返回的结果是5,如何实现呀?
#!/bin/bash
grep BuildVersion|sed 's/.*<.*>\([^<].*\)<.*>.*/\1/'

结果返回的是“BuildVersion”,而不是“5”,如果要查询BuildVersion自动返回数值5应当如何写?

应该没错的。试一下: echo "BuildVersion 5"|grep BuildVersion|sed 's/.*<.*>\([^<].*\)<.*>.*/\1/'我在SL的终端里试,返回值是5

目前需要从xml文件提取数据,想做一个xmlparser.sh
xml 类似这样

  



希望输入 xmlparser.sh a.xml hostip可以返回192.168.0.1


#!/bin/sh

if [ $# -ne 2 ];then
   echo "Usage: $0 "
   exit 0
fi

grep $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.]+"
楼上这个有问题,如果我要得到的是

  

中的sharename,那么,呵呵,就错了

我觉得应该先定位到第二个参数“$2”的位置,然后再提取“=”后面的内容

这里有个完整的实现:
Parse Simple XML Files using Bash – Extract Name Value Pairs and Attributes
http://www.humbug.in/2010/parse-simple-xml-files-using-bash-extract-name-value-pairs-and-attributes/


不过需要安装xmllint.

设计到对多个xml文件进行element的读取和列表。有人做过么?
举个例子,
多个xml文件里面都有

        xxx</titlel> <br></article> <br> <br>通过shell读取,然后合并到一起,再生成一个新的xml,但是其他元素不变。 <br><article> <br>        <title>aaa</titlel> <br></article> <br><article> <br>        <title>bbb</titlel> <br></article> <br> <br>如果格式异常简单,没有特例,那么可以用shell实现 <br>如果有可能格式复杂,因为shell的命令所使用的正则表达式都不支持跨行匹配,所以用shell来解决这个问题就绕圈子了。 <br>用perl来作这个工作最直接、简单。perl的XML:DOM模块是专门处理XML文件的。 <br> <br>偶倒是觉得,用PHP写Scripts也很方便,功能强大,而且,跨平台, <br> <br>#!/bin/sh <br> <br> <br> <br>sed -n '/<article>/{ <br> <br>N; <br> <br>/\n[[:space:]]*<title>/{ <br> <br>    N; <br> <br>    /<article>.*<\/article>/p <br> <br>    } <br> <br>D; <br> <br>n <br> <br>}' <br> <br> <br>这小段代码能把一个xml文件中,你要的东西拿出来. <br>你可以用for file in $*把这些信息都>>tmpfile中. <br>然后用sed 在指定文件的指定位置用r命令把tmpfile粘贴进来~~~~ <br> <br>大思路如此^_^  我想有这个东西(只要能正确的跑出结果)后面就不难了吧... <br> <br>Name <br>xmllint — command line XML tool <br> <br>Synopsis <br>xmllint [[--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] <br> <br>Introduction <br>The 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. <br> <br>It is included in libxml2. <br> <br>Options <br>--version <br>Display the version of libxml2 used. <br>--debug <br>Parse a file and output an annotated tree of the in-memory version of the document. <br>--shell <br>Run a navigating shell. Details on available commands in shell mode are below. <br>--debugent <br>Debug the entities defined in the document. <br>--copy <br>Test the internal copy implementation. <br>--recover <br>Output any parsable portions of an invalid document. <br>--noent <br>Substitute entity values for entity references. By default, xmllint leaves entity references in place. <br>--nocdata <br>Substitute CDATA section by equivalent text nodes. <br>--nsclean <br>Remove redundant namespace declarations. <br>--noout <br>Suppress output. By default, xmllint outputs the result tree. <br>--htmlout <br>Output 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. <br>--nowrap <br>Do not output HTML doc wrapper. <br>--valid <br>Determine 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. <br>--postvalid <br>Validate after parsing is completed. <br>--dtdvalid URL <br>Use the DTD specified by URL for validation. <br>--dtdvalidfpi FPI <br>Use the DTD specified by the Public Identifier FPI for validation, note that this will require a Catalog exporting that Public Identifier to work. <br>--timing <br>Output information about the time it takes xmllint to perform the various steps. <br>--output file <br>Define 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. <br>--repeat <br>Repeat 100 times, for timing or profiling. <br>--insert <br>Test for valid insertions. <br>--compress <br>Turn on gzip compression of output. <br>--html <br>Use the HTML parser. <br>--xmlout <br>Used 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. <br>--push <br>Use the push mode of the parser. <br>--memory <br>Parse from memory. <br>--maxmem nnbytes <br>Test 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. <br>--nowarning <br>Do not emit warnings from the parser and/or validator. <br>--noblanks <br>Drop ignorable blank spaces. <br>--format <br>Reformat and reindent the output. The $XMLLINT_INDENT environment variable controls the indentation (default value is two spaces " "). <br>--testIO <br>Test user input/output support. <br>--encode encoding <br>Output in the given encoding. <br>--catalogs <br>Use the catalogs from $SGML_CATALOG_FILES. Otherwise /etc/xml/catalog is used by default. <br>--nocatalogs <br>Do not use any catalogs. <br>--auto <br>Generate a small document for testing purposes. <br>--xinclude <br>Do XInclude processing. <br>--noxincludenode <br>Do XInclude processing but do not generate XInclude start and end nodes. <br>--loaddtd <br>Fetch external DTD. <br>--dtdattr <br>Fetch external DTD and populate the tree with inherited attributes. <br>--dropdtd <br>Remove DTD from output. <br>--stream <br>Use 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. <br>--walker <br>Test 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. <br>--chkregister <br>Turn on node registration. Useful for developers testing libxml2 node tracking code. <br>--pattern patternvalue <br>Used 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. <br>--relaxng schema <br>Use RelaxNG file named schema for validation. <br>--schema schema <br>Use a W3C XML Schema file named schema for validation. <br>--c14n <br>Use the W3C XML Canonicalisation (C14N) to serialize the result of parsing to stdout. It keeps comments in the result. <br>Shell <br>xmllint offers an interactive shell mode invoked with the --shell command. Available commands in shell mode include: <br> <br>base <br>display XML base of the node <br>bye <br>leave shell <br>cat node <br>Display node if given or current node. <br>cd path <br>Change the current node to path (if given and unique) or root if no argument given. <br>dir path <br>Dumps information about the node (namespace, attributes, content). <br>du path <br>Show the structure of the subtree under path or the current node. <br>exit <br>Leave the shell. <br>help <br>Show this help. <br>free <br>Display memory usage. <br>load name <br>Load a new document with the given name. <br>ls path <br>List contents of path (if given) or the current directory. <br>pwd <br>Display the path to the current node. <br>quit <br>Leave the shell. <br>save name <br>Saves the current document to name if given or to the original name. <br>validate <br>Check the document for error. <br>write name <br>Write the current node to the given filename. <br>Catalogs <br>Catalog 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. <br> <br>Debugging Catalogs <br>Setting the environment variable XML_DEBUG_CATALOG using the command "export XML_DEBUG_CATALOG=" outputs debugging information related to catalog operations. <br> <br>Error Return Codes <br>On the completion of execution, Xmllint returns the following error codes: <br> <br>0 <br>No error <br>1 <br>Unclassified <br>2 <br>Error in DTD <br>3 <br>Validation error <br>4 <br>Validation error <br>5 <br>Error in schema compilation <br>6 <br>Error writing output <br>7 <br>Error in pattern (generated when [--pattern] option is used) <br>8 <br>Error in Reader registration (generated when [--chkregister] option is used) <br>9 <br>Out of memory error <br> <br>Parse Simple XML Files using Bash – Extract Name Value Pairs and Attributes <br> <br> <br>2 Comments <br>1 <br>Tweet <br> <br> <br> <br> <br>Pratik Sinha | July 31, 2010 <br> <br> <br>I 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 <br>#!/bin/bash <br>xmlFile=$1 <br> <br>function par***ML() { <br>  elemList=( $(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep -e "</.*>$" | while read line; do \ <br>    echo $line | sed -e 's/^.*<\///' | cut -d '>' -f 1; \ <br>  done) ) <br> <br>  totalNoOfTags=${#elemList[@]}; ((totalNoOfTags--)) <br>  suffix=$(echo ${elemList[$totalNoOfTags]} | tr -d '</>') <br>  suffix="${suffix}_" <br> <br>  for (( i = 0 ; i < ${#elemList[@]} ; i++ )); do <br>    elem=${elemList[$i]} <br>    elemLine=$(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep "</$elem>") <br>    echo $elemLine | grep -e "^</[^ ]*>$" 1>/dev/null 2>&1 <br>    if [ "0" = "$?" ]; then <br>      continue <br>    fi <br>    elemVal=$(echo $elemLine | tr '\011' '\040'| sed -e 's/^[ ]*//' -e 's/^<.*>\([^<].*\)<.*>$/\1/' | sed -e 's/^[ ]*//' | sed -e 's/[ ]*$//') <br>    xmlElem="${suffix}$(echo $elem | sed 's/-/_/g')" <br>    eval ${xmlElem}=`echo -ne \""${elemVal}"\"` <br>    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 ' ' '>')) <br>    for (( j = 0 ; j < ${#attrList[@]} ; j++ )); do <br>      attr=${attrList[$j]} <br>      ((j++)) <br>      attrVal=$(echo ${attrList[$j]} | tr '>' ' ') <br>      attrName=`echo -ne ${xmlElem}_${attr}` <br>      eval ${attrName}=`echo -ne \""${attrVal}"\"` <br>    done <br>  done <br>} <br> <br>par***ML <br>echo "$status_xyz |  $status_abc |  $status_pqr" #Variables for each  XML ELement <br>echo "$status_xyz_arg1 |  $status_abc_arg2 |  $status_pqr_arg3 | $status_pqr_arg4" #Variables for each XML Attribute <br>echo "" <br> <br>#All the variables that were produced by the par***ML function <br>set | /bin/grep -e "^$suffix" <br> <br>The XML File used for the above script example is: <br><?xml version="1.0"?> <br><status> <br>  <xyz arg1="1"> a </xyz> <br>  <abc arg2="2"> p </abc> <br>  <pqr arg3="3" arg4="a phrase"> x </pqr> <br></status> <br> <br> <br>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. <br> <br>The output when the script is ran with the xml file as an argument is <br>@$ bash  par***ML.sh test.xml <br>a |  p |  x <br>1 |  2 |  3 | a phrase <br> <br>status_abc=p <br>status_abc_arg2=2 <br>status_pqr=x <br>status_pqr_arg3=3 <br>status_pqr_arg4='a phrase' <br>status_xyz=a <br>status_xyz_arg1=1 <br> <br>This script won’t work for XML files like the one below with duplicate element names. <br><?xml version="1.0"?> <br><status> <br>  <test arg1="1"> a </test> <br>  <test arg2="2"> p </test> <br>  <test arg3="3" arg4="a phrase"> x </test> <br></status> <br> <br> <br>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>. <br><?xml version="1.0"?> <br><status> <br>  <test arg1="1"> <br>    <test1 arg2="2">abc</test1> <br>  </test> <br></status> <br> <br>38.写入XML数据库 <br>#!/bin/bash <br> <br>39.ZIP压缩文件 <br>#!/bin/sh <br>zip -r "/%%1" "%%2" <br> <br>40.ZIP解压缩 <br>#!/bin/sh <br>unzip -x "/%%1" "%%2" <br> <br>41.获得应用程序完整路径 <br>#!/bin/bash <br> <br>42.ZIP压缩文件夹 <br>#!/bin/bash <br> <br>43.递归删除目录下的文件 <br>#!/bin/bash <br>rm -if "%%1/*" <br>OLDIFS=$IFS <br>IFS=: <br>for path in $( find %%1 -type d -printf "%p$IFS") <br>do <br>for file in $path/*.c $path/*.cpp <br>do <br>if [[ ! "$file" =~ \*.[A-Za-z]+ ]]; then <br>#"$(path)/$(file)" <br>fi <br>done <br>done <br>IFS=$OLDIFS <br> <br>44.IDEA加密算法 <br>#!/bin/bash <br> <br>45.RC6算法 <br>#!/bin/bash <br>cat <<'EOF'> rc6.c <br>#include<stdio.h> <br>/* Timing data for RC6 (rc6.c) <br> <br>128 bit key: <br>Key Setup:    1632 cycles <br>Encrypt:       270 cycles =    94.8 mbits/sec <br>Decrypt:       226 cycles =   113.3 mbits/sec <br>Mean:          248 cycles =   103.2 mbits/sec <br> <br>192 bit key: <br>Key Setup:    1885 cycles <br>Encrypt:       267 cycles =    95.9 mbits/sec <br>Decrypt:       235 cycles =   108.9 mbits/sec <br>Mean:          251 cycles =   102.0 mbits/sec <br> <br>256 bit key: <br>Key Setup:    1877 cycles <br>Encrypt:       270 cycles =    94.8 mbits/sec <br>Decrypt:       227 cycles =   112.8 mbits/sec <br>Mean:          249 cycles =   103.0 mbits/sec <br> <br>*/ <br> <br>#include "../std_defs.h" <br> <br>static char *alg_name[] = { "rc6", "rc6.c", "rc6" }; <br> <br>char **cipher_name() <br>{ <br>    return alg_name; <br>} <br> <br>#define f_rnd(i,a,b,c,d)                    \ <br>        u = rotl(d * (d + d + 1), 5);       \ <br>        t = rotl(b * (b + b + 1), 5);       \ <br>        a = rotl(a ^ t, u) + l_key;      \ <br>        c = rotl(c ^ u, t) + l_key[i + 1] <br> <br>#define i_rnd(i,a,b,c,d)                    \ <br>        u = rotl(d * (d + d + 1), 5);       \ <br>        t = rotl(b * (b + b + 1), 5);       \ <br>        c = rotr(c - l_key[i + 1], t) ^ u;  \ <br>        a = rotr(a - l_key, u) ^ t <br> <br>u4byte  l_key[44];  /* storage for the key schedule         */ <br> <br>/* initialise the key schedule from the user supplied key   */ <br> <br>u4byte *set_key(const u4byte in_key[], const u4byte key_len) <br>{   u4byte  i, j, k, a, b, l[8], t; <br> <br>    l_key[0] = 0xb7e15163; <br> <br>    for(k = 1; k < 44; ++k) <br>        <br>        l_key[k] = l_key[k - 1] + 0x9e3779b9; <br> <br>    for(k = 0; k < key_len / 32; ++k) <br> <br>        l[k] = in_key[k]; <br> <br>    t = (key_len / 32) - 1; // t = (key_len / 32); <br> <br>    a = b = i = j = 0; <br> <br>    for(k = 0; k < 132; ++k) <br>    {   a = rotl(l_key + a + b, 3); b += a; <br>        b = rotl(l[j] + b, b); <br>        l_key = a; l[j] = b; <br>        i = (i == 43 ? 0 : i + 1); // i = (i + 1) % 44;  <br>        j = (j == t ? 0 : j + 1);  // j = (j + 1) % t; <br>    } <br> <br>    return l_key; <br>}; <br> <br>/* encrypt a block of text  */ <br> <br>void encrypt(const u4byte in_blk[4], u4byte out_blk[4]) <br>{   u4byte  a,b,c,d,t,u; <br> <br>    a = in_blk[0]; b = in_blk[1] + l_key[0]; <br>    c = in_blk[2]; d = in_blk[3] + l_key[1]; <br> <br>    f_rnd( 2,a,b,c,d); f_rnd( 4,b,c,d,a); <br>    f_rnd( 6,c,d,a,b); f_rnd( 8,d,a,b,c); <br>    f_rnd(10,a,b,c,d); f_rnd(12,b,c,d,a); <br>    f_rnd(14,c,d,a,b); f_rnd(16,d,a,b,c); <br>    f_rnd(18,a,b,c,d); f_rnd(20,b,c,d,a); <br>    f_rnd(22,c,d,a,b); f_rnd(24,d,a,b,c); <br>    f_rnd(26,a,b,c,d); f_rnd(28,b,c,d,a); <br>    f_rnd(30,c,d,a,b); f_rnd(32,d,a,b,c); <br>    f_rnd(34,a,b,c,d); f_rnd(36,b,c,d,a); <br>    f_rnd(38,c,d,a,b); f_rnd(40,d,a,b,c); <br> <br>    out_blk[0] = a + l_key[42]; out_blk[1] = b; <br>    out_blk[2] = c + l_key[43]; out_blk[3] = d; <br>}; <br> <br>/* decrypt a block of text  */ <br> <br>void decrypt(const u4byte in_blk[4], u4byte out_blk[4]) <br>{   u4byte  a,b,c,d,t,u; <br> <br>    d = in_blk[3]; c = in_blk[2] - l_key[43]; <br>    b = in_blk[1]; a = in_blk[0] - l_key[42]; <br> <br>    i_rnd(40,d,a,b,c); i_rnd(38,c,d,a,b); <br>    i_rnd(36,b,c,d,a); i_rnd(34,a,b,c,d); <br>    i_rnd(32,d,a,b,c); i_rnd(30,c,d,a,b); <br>    i_rnd(28,b,c,d,a); i_rnd(26,a,b,c,d); <br>    i_rnd(24,d,a,b,c); i_rnd(22,c,d,a,b); <br>    i_rnd(20,b,c,d,a); i_rnd(18,a,b,c,d); <br>    i_rnd(16,d,a,b,c); i_rnd(14,c,d,a,b); <br>    i_rnd(12,b,c,d,a); i_rnd(10,a,b,c,d); <br>    i_rnd( 8,d,a,b,c); i_rnd( 6,c,d,a,b); <br>    i_rnd( 4,b,c,d,a); i_rnd( 2,a,b,c,d); <br> <br>    out_blk[3] = d - l_key[1]; out_blk[2] = c; <br>    out_blk[1] = b - l_key[0]; out_blk[0] = a; <br>}; <br>int main() <br>{ <br> <br>return 0; <br>} <br>EOF <br>gcc -o rc6 rc6.c <br>if [ $? -eq 0 ]; then <br>./combine <br>else <br>echo 'Compile ERROR' <br>fi <br> <br>46.Grep <br>#!/bin/bash <br>grep -qE %%1 %%2 <br> <br>47.直接创建多级目录 <br>#!/bin/bash <br>mkdir -p %%1 <br> <br>48.批量重命名 <br>#!/bin/bash <br>find $PWD -type f -name '*\.cpp' |sed s/'\.cpp'//g|awk '{MV = "mv"};{C = "\.c"};{ CPP="\.cpp"}; {print MV, $1 CPP , $1 C}'|sh <br>ls | awk -F '-' '{print "mv "$0" "$2}' #去掉带'-'的前缀 <br> <br>49.文本查找替换 <br>#!/bin/bash <br>sed -e 's:%%2:%%3:g' %%1 <br>#sed -e 's/%%2/%%3/g' %%1 <br> <br>50.文件关联 <br>#!/bin/bash <br> <br>51.批量转换编码从GB2312到Unicode <br>#!/bin/bash <br>scode="gbk" <br>dcode="ucs2" <br>for FILE in $(find $(pwd) -type f) <br>do <br>TMP_file=$(mktemp -p $(pwd)) <br>if [ -f $FILE ]; then <br>Fright=$(stat -c %a $FILE) <br>Fuser=$(stat -c %U $FILE) <br>Fgrp=$(stat -c %G $FILE) <br>iconv -f $scode -t $dcode $FILE -o $TMP_file <br>mv $TMP_file $FILE <br>chmod $Fright $FILE <br>chown $Fuser.$Fgrp $FILE <br>fi <br>done <br> <br>52.设置JDK环境变量 <br>#!/bin/bash <br>find "$PWD" -type f \( -iname '*.bin' \) -print0 | xargs -0 chmod +x <br>find -type f \( -iname '*.bin' \) -print | <br>while read filename <br>do <br>    case "$filename" in <br>    *.bin) <br>        xterm -e "$filename" && rm -if "$filename" <br>        ;; <br>    esac <br>done <br>OLDIFS=$IFS <br>IFS=$'\n' <br>for line in `cat ~/.bashrc` <br>do <br>if [[ "$line" =~ .*export.* ]]; then <br>    if [[ "$line" =~ .*JAVA_HOME=.* ]]; then <br>      if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]]; then <br>       javahome=$line <br>      fi <br>    fi <br>fi <br>if [[ "$line" =~ export\ PATH=\$PATH:\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin$ ]];then <br>    javapath=$line <br>fi <br>if [[ "$line" =~ export\ CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib$ ]];then <br>    classpath=$line <br>fi <br>done <br>if [ ! -n "$javahome" ]; then <br>sed -i '$a export JAVA_HOME='$(pwd)'/jdk1.6.0_25' ~/.bashrc <br>else <br>sed -i 's:'${javahome//\\/\\\\}':export JAVA_HOME='$(pwd)'/jdk1.6.0_32:g' ~/.bashrc <br>fi <br>if [ ! -n "$javapath" ]; then <br>sed -i '$a export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin' ~/.bashrc <br>fi <br>if [ ! -n "$classpath" ]; then <br>sed -i '$a export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib' ~/.bashrc <br>fi <br>IFS=$OLDIFS <br> <br>#!/bin/bash <br>shift <br>OLDIFS=$IFS <br>IFS=$'\n' <br>for line in `cat ~/TestBash.txt` #~/.bashrc <br>do <br>  if [[ "$line" =~ .*export.* ]]; then <br>    if [[ "$line" =~ export\ CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib$ ]]; then <br>      classpath=$line <br>    elif [[ "$line" =~ export\ PATH=\$PATH:\$CATALINA_HOME/bin$ ]]; then <br>      jbosspath=$line <br>fi <br>    if [[ "$line" =~ .*JAVA_HOME=.* ]]; then <br>      if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then <br>       javahome=$line <br>      fi <br>    elif [[ "$line" =~ .*CATALINA_HOME=.* ]];then <br>      if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then <br>       catalinahome=$line <br>      fi <br>    elif [[ "$line" =~ .*TOMCAT_HOME=.* ]];then <br>      if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then <br>       tomcathome=$line <br>      fi <br>    elif [[ "$line" =~ .*CATALINA_BASE=.* ]];then <br>      if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then <br>       catalinabase=$line <br>      fi <br>    elif [[ "$line" =~ .*JBOSS_HOME=.* ]];then <br>      if [[ "$line" =~ =(\/([0-9a-zA-Z._]+))+ ]];then <br>       jbosshome=$line <br>      fi <br>    fi <br>  elif [[ "$line" =~ ^PATH=\$PATH:\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin$ ]];then <br>    javapath=$line <br>  fi <br>  if [[ "$line" =~ export\ CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib$ ]];then <br>    classpath=$line <br>  fi <br>  if [[ "$line" =~ export\ PATH=\$PATH:\$JBOSS_HOME/bin$ ]];then <br>    jbosspath=$line <br>  fi <br>done <br>if [ ! -n "$javahome" ]; then <br>sed -i '$a export JAVA_HOME='$(pwd)'/jdk1.6.0_24' ~/TestBash.txt #~/.bashrc <br>else <br>sed -i 's:'${javahome//\\/\\\\}':export JAVA_HOME='$(pwd)'/jdk1.6.0_24:g' ~/TestBash.txt <br>fi <br>if [ ! -n "$javapath" ]; then <br>sed -i '$a PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin' ~/TestBash.txt #~/.bashrc <br>fi <br>if [ ! -n "$classpath" ]; then <br>sed -i '$a export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib' ~/TestBash.txt #~/.bashrc <br>fi <br>if [ ! -n "$catalinahome" ]; then <br>sed -i '$a export CATALINA_HOME='$(pwd) ~/TestBash.txt #~/.bashrc <br>else <br>sed -i 's:'${catalinahome//\\/\\\\}':export CATALINA_HOME='$(pwd)':g' ~/TestBash.txt <br>fi <br>if [ ! -n "$tomcathome" ]; then <br>sed -i '$a export TOMCAT_HOME='$(pwd) ~/TestBash.txt #~/.bashrc <br>else <br>sed -i 's:'${tomcathome//\\/\\\\}':export TOMCAT_HOME='$(pwd)':g' ~/TestBash.txt <br>fi <br>if [ ! -n "$catalinabase" ]; then <br>sed -i '$a export CATALINA_BASE='$(pwd) ~/TestBash.txt #~/.bashrc <br>else <br>sed -i 's:'${catalinabase//\\/\\\\}':export CATALINA_BASE='$(pwd)':g' ~/TestBash.txt <br>fi <br>if [ ! -n "$jbosshome" ]; then <br>sed -i '$a export JBOSS_HOME='$(pwd) ~/TestBash.txt #~/.bashrc <br>else <br>sed -i 's:'${jbosshome//\\/\\\\}':export JBOSS_HOME='$(pwd)':g' ~/TestBash.txt <br>fi <br>if [ ! -n "$jbosspath" ]; then <br>sed -i '$a export PATH=$PATH:$CATALINA_HOME/bin' ~/TestBash.txt #~/.bashrc <br>fi <br>IFS=$OLDIFS <br> <br>53.批量转换编码从Unicode到GB2312 <br>#!/bin/bash <br>scode="ucs2" <br>dcode="gbk" <br>for FILE in $(find $(pwd) -type f) <br>do <br>TMP_file=$(mktemp -p $(pwd)) <br>if [ -f $FILE ]; then <br>Fright=$(stat -c %a $FILE) <br>Fuser=$(stat -c %U $FILE) <br>Fgrp=$(stat -c %G $FILE) <br>iconv -f $scode -t $dcode $FILE -o $TMP_file <br>mv $TMP_file $FILE <br>chmod $Fright $FILE <br>chown $Fuser.$Fgrp $FILE <br>fi <br>done <br> <br>54.删除空文件夹 <br>#!/bin/bash <br>rmdir -p %%1 <br> <br>55.GB2312文件转UTF-8格式 <br>#!/bin/bash <br>iconv -f gbk -t utf8 %%1 -o %%2 <br> <br>56.UTF-8文件转GB2312格式 <br>#!/bin/bash <br>iconv -f utf8 -t  gbk %%1 -o %%2 <br> <br>57.获取文件路径的父路径 <br>#!/bin/bash <br>%%1=basename $PWD <br> <br>58.Unicode文件转UTF-8格式 <br>#!/bin/bash <br>iconv -f ucs2 -t  utf-8 %%1 -o %%2 <br> <br>59.CRC循环冗余校验 <br>#!/bin/bash <br>cat <<'EOF'> crc.c <br>#include<stdio.h> <br> <br>unsigned long int crc32_table[256];  <br> <br>unsigned long int ulPolynomial = 0x04c11db7;  <br> <br>unsigned long int Reflect(unsigned long int ref, char ch)  <br> <br>  {     unsigned long int value(0);  <br> <br>        // 交换bit0和bit7,bit1和bit6,类推  <br> <br>        for(int i = 1; i < (ch + 1); i++)  <br> <br>         {            if(ref & 1)  <br> <br>                      value |= 1 << (ch - i);  <br> <br>                   ref >>= 1;      }  <br> <br>        return value;  <br> <br>}  <br> <br>init_crc32_table()  <br> <br>  {     unsigned long int crc,temp;  <br> <br>        // 256个值  <br> <br>        for(int i = 0; i <= 0xFF; i++)  <br> <br>         {   temp=Reflect(i, 8);  <br> <br>               crc32_table[i]= temp<< 24;  <br> <br>                for (int j = 0; j < 8; j++){  <br> <br>             unsigned long int t1,t2;  <br> <br>  unsigned long int flag=crc32_table[i]&0x80000000;  <br> <br>                t1=(crc32_table[i] << 1);  <br> <br>                if(flag==0)  <br> <br>                  t2=0;  <br> <br>                else  <br> <br>                  t2=ulPolynomial;  <br> <br>                crc32_table[i] =t1^t2 ;        }  <br> <br>               crc=crc32_table[i];  <br> <br>               crc32_table[i] = Reflect(crc32_table[i], 32);  <br>        } <br>} <br>unsigned long GenerateCRC32(char xdata * DataBuf,unsigned long  len)  <br> <br>  {  <br> <br>        unsigned long oldcrc32;  <br> <br>        unsigned long crc32;  <br> <br>        unsigned long oldcrc;  <br> <br>        unsigned  int charcnt;  <br> <br>         char c,t;  <br> <br>        oldcrc32 = 0x00000000; //初值为0  <br> <br>     charcnt=0;  <br> <br>         while (len--) {  <br> <br>                 t= (oldcrc32 >> 24) & 0xFF;   //要移出的字节的值  <br> <br>     oldcrc=crc_32_tab[t];         //根据移出的字节的值查表  <br> <br>                 c=DataBuf[charcnt];          //新移进来的字节值  <br> <br>                 oldcrc32= (oldcrc32 << 8) | c;   //将新移进来的字节值添在寄存器末字节中  <br> <br>                 oldcrc32=oldcrc32^oldcrc;     //将寄存器与查出的值进行xor运算  <br> <br>                 charcnt++;  <br> <br>        }  <br> <br>         crc32=oldcrc32;  <br> <br>         return crc32;  <br> <br>}  <br> <br>参数表可以先在PC机上算出来,也可在程序初始化时完成。下面是用于计算参数表的c语言子程序,在Visual C++ 6.0下编译通过。  <br> <br>#include <stdio.h>  <br> <br>unsigned long int crc32_table[256];  <br> <br>unsigned long int ulPolynomial = 0x04c11db7;  <br> <br>unsigned long int Reflect(unsigned long int ref, char ch)  <br> <br>  {     unsigned long int value(0);  <br> <br>        // 交换bit0和bit7,bit1和bit6,类推  <br> <br>        for(int i = 1; i < (ch + 1); i++)  <br> <br>         {            if(ref & 1)  <br> <br>                      value |= 1 << (ch - i);  <br> <br>                   ref >>= 1;      }  <br> <br>        return value;  <br> <br>} <br>int main() <br>{ <br>     unsigned long int crc,temp;  <br> <br>        // 256个值  <br> <br>        for(int i = 0; i <= 0xFF; i++)  <br> <br>         { <br>temp=Reflect(i, 8); <br>               crc32_table[i]= temp<< 24;  <br> <br>                for (int j = 0; j < 8; j++){  <br> <br>             unsigned long int t1,t2;  <br> <br>  unsigned long int flag=crc32_table[i]&0x80000000; <br>                t1=(crc32_table[i] << 1);  <br> <br>                if(flag==0)  <br> <br>                  t2=0;  <br> <br>                else  <br> <br>                  t2=ulPolynomial;  <br> <br>                crc32_table[i] =t1^t2 ;        <br>}  <br> <br>               crc=crc32_table[i]; <br>               crc32_table[i] = Reflect(crc32_table[i], 32); <br>        } <br>return 0; <br>} <br>EOF <br>gcc -o crc crc.c <br>if [ $? -eq 0 ]; then <br>./combine <br>else <br>echo 'Compile ERROR' <br>fi <br> <br>60.判断是否为空文件 <br>#!/bin/bash <br> <br>61.终止程序 <br>#!/bin/sh <br>kill -KILL pidof %%1 -s <br>#killall %%1 <br> <br>62.定时关机 <br>#!/bin/sh <br>shutdown -h %%1 & #23:00 <br>#shutdown -h now <br>#halt <br>#/sbin/poweroff <br>#init 0 <br> <br>63.显示进程列表 <br>#!/bin/sh <br>ps aux <br>#fuser -l <br> <br>64.遍历文件夹列出文件大小 <br>#!/bin/sh <br>du -sH "%%1/*" <br> <br>65.GOST算法 <br>#!/bin/bash <br> <br>66.对目标压缩文件解压缩到指定文件夹 <br>#!/bin/bash <br> <br>67.保存文件时重名自动生成新文件 <br>#!/bin/bash <br> <br>68.打开网页 <br>#!/bin/sh <br>lynx %%1 <br> <br>69.删除空文件夹整合操作 <br>#!/bin/bash <br> <br>70.获取磁盘所有分区 <br>#!/bin/sh <br>df -k <br> <br>71.激活一个程序或程序关联的文件 <br>#!/bin/bash <br> <br>72.MP3播放 <br>#!/bin/sh <br>amp "%%1" <br> <br>73.WAV播放 <br>#!/bin/sh <br>amp "%%1" <br> <br>74.写图像到剪切板 <br>#!/bin/bash <br> <br>75.从剪贴板复制图像到窗体 <br>#!/bin/bash <br> <br>76.删除文件夹下的所有文件且不删除文件夹下的文件夹 <br>#!/bin/sh <br>rm -if "%%1/*" <br> <br>77.XML遍历结点属性值 <br>#!/bin/bash <br> <br>78.Unicode文件转GB2312格式 <br>#!/bin/sh <br>iconv -f ucs2 -t  gbk %%1 -o %%2 <br> <br>79.开源程序库Xercesc-C++代码工程中内联80.提取包含头文件列表 <br>#!/bin/bash <br> <br>81.GB2312文件转Unicode格式 <br>#!/bin/sh <br>iconv -f gbk -t  ucs2 %%1 -o %%2 <br> <br>82.Java程序打包 <br>#!/bin/bash <br> <br>83.UTF-8文件转Unicode格式 <br>#!/bin/bash <br>iconv -f utf8 -t  ucs2 %%1 -o %%2 <br> <br>84.创建PDF文档 <br>#!/bin/bash <br> <br>85.创建Word文档 <br>#!/bin/bash <br> <br>86.快速高效的文件加密 <br>#!/bin/bash <br> <br>87.从CSV文件构造XML文档 <br>#!/bin/bash <br> <br>88.从XML文档生成CSV文件 <br>#!/bin/bash <br> <br>89.模拟键盘输入字符串 <br>#!/bin/bash <br> <br>90.提取PDF文件中的文本 <br>#!/bin/bash <br> <br>91.操作内存映射文件 <br>#!/bin/bash <br>91.1发送内存映射数据 <br>#!/bin/bash <br> <br>91.2接收内存映射数据 <br>#!/bin/bash <br> <br>92.重定向windows控制台程序的输出信息 <br>#!/bin/bash <br> <br>93.基数转序数 <br>#!/bin/bash <br> <br>94.数字月份转英文 <br>#!/bin/bash <br> <br>95.报表相关 <br>#!/bin/bash <br> <br>96.根据进程名获取进程ID <br>#!/bin/bash <br>pidof %%1 -s <br> <br>96.BCP导入 <br>#!/bin/bash <br> <br>97.BCP导出 <br>#!/bin/bash <br> <br> <br>98.计算文件MD5值 <br>#!/bin/bash <br>md5sum "%%1" <br> <br>99.计算获取文件夹中文件的MD5值 <br>#!/bin/bash <br> <br>100.复制一个目录下所有文件到一个文件夹中 <br>#!/bin/bash <br>cp $(find "%%1" -name *.*) "%%2" <br> <br>101.移动一个目录下所有文件到一个文件夹中 <br>#!/bin/bash <br>mv $(find "%%1" -name *.*) "%%2" <br> <br>102.文件RSA高级加密 <br>十进制到十六进制 <br>typeset -i16 BASE_16_NUM <br>BASE_16_NUM=%%1 <br>echo $BASE_16_NUM <br> <br>八进制到十六进制 <br>#!/bin/bash <br>typeset -i16 BASE_16_NUM <br>BASE_16_NUM=8#%%1 <br>echo $BASE_16_NUM <br> <br>十进制到八进制 <br>#!/bin/bash <br>printf %o %%1; echo <br> <br>十进制到十六进制 <br>#!/bin/bash <br>printf %x %%1; echo <br> <br>103.计算文件大小 <br>#!/bin/bash <br>wc "%%1" <br> <br>104.计算文件夹的大小 <br>#!/sbin/ksh <br>dir=%%1 <br>(cd $dir;pwd) <br>find $dir -type d -print | du | awk '{print $2, "== ("$1/2"kb)"}' |sort -f | <br>sed -e "s,[^ /]*/([^ /]*) ==,|--1," -e"s,[^ /]*/,| ,g" <br> <br>105.快速获得当前程序的驱动器、路径、文件名和扩展名 <br> <br>106.磁盘剩余空间计算 <br>#!/bin/bash <br>df -k <br> <br>107.获取当前程序进程ID <br>#!/bin/bash <br>pidof %%1 -s <br> <br>108.全盘搜索文件 <br>#!/bin/bash <br>#updatedb <br>#locate %%1 <br>slocate %%1 <br> <br>109.获得当前登录的用户名 <br>#!/bin/bash <br>whoami <br> <br>110.获得所有用户名 <br>#!/bin/bash <br>who <br> <br>111.创建MySQL管理用户 <br>#!/bin/bash <br>mysqladmin -u root password %%1 <br> <br>112.管理MySQL数据库服务器 <br>#!/bin/bash <br>112.1.启动MySQL数据库服务器 <br>mysqld -console <br> <br>112.2.登录MySQL数据库服务器 <br>112.2.1.登录本地MySQL数据库服务器 <br>mysql -uroot -p%%1 <br> <br>112.2.2.登录远程MySQL数据库服务器 <br>mysql -h %%1 -u %%2 -p%%3 <br> <br>112.3.关闭MySQL数据库服务器 <br>mysqladmin -u root shutdown <br>#pkill -9 mysql <br> <br>112.4.测试MySQL数据库服务器 <br>mysqlshow || mysqlshow -u root mysql || mysqladmin version status || mysql test <br> <br>113.MySQL执行查询 <br>#!/bin/sh <br>mysqladmin -u %%1 -p%%2 SELECT * INTO OUTFILE './bestlovesky.xls' FROM bestlovesky WHERE 1 ORDER BY id DESC  LIMIT 0, 50; <br> <br>mysql -u %%1 -p%%2 -e "SELECT * INTO OUTFILE './bestlovesky.xls' FROM bestlovesky WHERE 1 ORDER BY id DESC  LIMIT 0, 50;" <br> <br>114.创建Oracle管理用户 <br>#!/bin/sh <br>114.1.创建新用户 <br>create user test identified by test default tablespace ts_test temporary <br>tablespace temp; <br> <br>114.2.给用户角色特权 <br>grant connect,resource to test; <br> <br>115.登录Oracle数据库 <br>#!/bin/bash <br>sqlplusw <br>sqlplus /nolog <br>conn username/password@Oranet <br>conn system/systempwd@whfc <br>conn sys/syspwd@whfc as sysdba <br> <br>115.创建Oracle表空间 <br>#!/bin/bash <br>conn system@whfc01 <br>create tablespace ts_test datafile '/data2/oradata/ciis/ts_test01.dbf' size <br> <br>116.添加Oracle数据文件 <br>#!/bin/bash <br>alter tablespace ts_test add datafile '/data2/oradata/ciis/ts_test02.dbf' size <br> <br>117.查看Oracle表空间大小 <br>#!/bin/bash <br>desc DBA_DATA_FILES <br> <br>118.查看Oracle剩余表空间大小 <br>#!/bin/bash <br>desc DBA_FREE_SPACE <br> <br>119.查看Oracle当前用户表名 <br>#!/bin/bash <br>select * from tab; <br> <br>120.Oracle创建索引 <br>#!/bin/bash <br>CREATE INDEX idx_book_bookid ON book(bookname); <br> <br>121.Oracle创建主键约束 <br>#!/bin/bash <br>ALTER TABLE book ADD CONSTRAINT pk_book_bookid PRIMARY KEY (bookid); <br> <br>122.Oracle显示表结构 <br>#!/bin/bash <br>desc book <br> <br>123.Oracle查看表的索引 <br>#!/bin/bash <br>column index_name format a30 <br>select table_name, index_name from user_indexes; <br> <br>124.Oracle查看索引列 <br>#!/bin/bash <br>select table_name, index_name, column_name, column_position from user_ind_columns; <br> <br>125.Oracle查看数据段占空间大小 <br>#!/bin/bash <br>desc user_segments <br> <br>126.Oracle查看表占空间大小 <br>#!/bin/bash <br>select segment_name,segment_type,bytes from user_segments where segment_type='TABLE'; <br> <br>127.安全删除USB <br>#!/bin/bash <br>rundll32.exe shell32.dll,Control_RunDLL hotplug.dll <br> <br>128.打开SQL Server Management Studio <br>#!/bin/bash <br>sqlwb %%1.sql <br> <br>129.MySQL数据库导出备份 <br>#!/bin/bash <br>mysqldump -u %%1 -p %%2 %%3>%%4.sql <br>mysqldump --opt test > mysql.test //将数据库test导出到mysql.test文件,后面是一个文本文件 <br>mysqldump -u root -p123456 --databases dbname > mysql.dbname //就是把数据库dbname导出到文件mysql.dbname中。 <br> <br>130.MySQL数据库数据导入 <br>mysql -u %%1 -p %%2 %%3<%%4.sql <br>mysqlimport -u root -p123456 < mysql.dbname <br>将文本数据导入数据库: <br>文本数据的字段之间用tab键隔开 <br>use test <br>load data local infile "文件名" into table 表名; <br>eg: load data local infile "D:/mysql.txt" into table mytable; <br>导入.sql 文件命令 <br>use database <br>source d:/mysql.sql; <br> <br>131.MySQL数据库检查 <br>mysqlcheck -o %%3 -u %%1 -p %%2 <br> <br>132.MySQL数据表文件修复 <br>myisamchk -B -o %%1.myd <br> <br>1,查看数据库状态 及启动停止 <br>/etc/init.d/mysqld status <br>/etc/init.d/mysqld start <br>/etc/init.d/mysqld stop <br> <br>2,给用户配置初始密码123456: <br>mysqladmin -u root -password 123456 <br> <br>3,修改root用户密码为 abc123 <br>mysqladmin -u root -p123456 password abc123 <br> <br>4,如果想去掉密码: <br>mysqladmin -u root -pabc123 password "" <br> <br>5,root连接数据库有密码和无密码: <br>mysql -u root(-uroot) -p <br>mysql <br> <br>6,增加用户 test1 密码 abc,让它可以在任何主机上登录,并对所有数据库有查询,插入,修改,删除的权限: <br>格式: grant select on 数据库.* to 用户名@登录主机 identified by "密码" <br>grant select,insert,update,delete on *.* to test1@"%" Identified by "abc"; <br> <br>8,增加一个用户test2,让它只可以在localhost上登录,并可以对数据库mydb进行查询,插入,修改,删除的操作, <br>这样用户即使使用知道test2的密码,他也无法从internet 上直接访问数据库,只能通过mysql主机上的web页面来访问。 <br>grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc"; <br>grant select,insert,update,delete on mydb.* to test2@localhost identified by ""; 设置无密码 <br> <br>9,显示数据库列表: <br>show databases; <br>use mysql 打开库 <br>show tables; <br> <br>10,表的操作 <br>describle 表名; 显示数据表的结构 <br>create database 库名; <br>drop database 库名; <br>create table 表名(字段设定列表) <br>drop table 表名; <br>delete from 表名;清空表记录 <br>select * from 表名; 显示表中的记录 <br>insert into 表名 values(, ,) <br> <br>alter table 表名 add column <字段名><字段选项> <br> <br>133.检查端口占用 <br>#!/bin/bash <br>netstat -ano <br> <br>134.Linux下检查Apache是否安装 <br>#!/bin/bash <br>rpm -qa | grep httpd <br> <br>135.Linux下启动Apache服务 <br>#!/bin/bash <br>service httpd start <br> <br>136.Linux下停止Apache服务 <br>#!/bin/bash <br>service httpd stop <br> <br>137.Linux下重新启动Apache服务 <br>#!/bin/bash <br>service httpd restart <br> <br>138.Linux下自动加载Apache 服务 <br>#!/bin/bash <br>chkconfig - level 3 httpd on <br> <br>139.Linux下不自动加载Apache 服务 <br>#!/bin/bash <br>chkconfig - level 3 httpd off <br> <br>140.Linux下检查VSFTP是否安装 <br>#!/bin/bash <br>rpm -qa | grep vsftpd <br> <br>141.Linux下启动VSFTP服务 <br>#!/bin/bash <br>service vsftpd start <br> <br>142.Linux下停止VSFTP服务 <br>#!/bin/bash <br>service vsftpd stop <br> <br>143.Linux下重新启动VSFTP服务 <br>#!/bin/bash <br>service vsftpd restart <br> <br>144.Linux下检查VSFTP是否被启动 <br>#!/bin/bash <br>pstree | grep vsftpd <br> <br>145.Linux下检查Sendmail是否安装 <br>#!/bin/bash <br>rpm -qa | grep sendmail <br> <br>146.Linux下启动Sendmail服务 <br>#!/bin/bash <br>service sendmail start <br> <br>147.Linux下停止Sendmail服务 <br>#!/bin/bash <br>service sendma stop <br> <br>148.Linux下重新启动Sendmail服务 <br>#!/bin/bash <br>service sendmail restart <br> <br>149.Linux下自动加载Sendmail 服务 <br>#!/bin/bash <br>chkconfig - level 3 sendmail on <br> <br>150.Linux下不自动加载Sendmail 服务 <br>#!/bin/bash <br>chkconfig - level 3 sendmail off <br> <br>151.Linux下文本图形界面配置启动服务 <br>#!/bin/bash <br>ntsysv <br> <br>152.以数组的方式删除文件夹 <br> <br>153.GCC批量编译 <br>#!/bin/bash <br>find -type f \( -iname '*.c' -o -iname '*.cpp' \) -print | <br>while read filename <br>do <br>    case "$filename" in <br>    *.c) <br>      gcc "$filename" -o "$(dirname "$filename")"/"$(basename "$filename" .c)" <br>        ;; <br>    *.cpp) <br>        gcc "$filename" -o "$(dirname "$filename")"/"$(basename "$filename" .cpp)" <br>        ;; <br>    esac <br>done <br> <br>154.批量赋予可执行权限 <br>#!/bin/bash <br>find "$PWD" -type f \( -iname '*.sh' -o  -iname '*.csh' -o  -iname '*.ksh' -o -iname '*.pl' -o -iname '*.bin' -o -iname '*.run' -o -iname '*.bundle' -o -iname '*.rb' -o -iname '*.py' \) -print0 | xargs -0 chmod +x <br> <br>#!/bin/bash <br>for file in *.sh *.pl *.bin *.run *.bundle *.rb *.py <br>do <br>if [[ ! "$file" =~ \*.[A-Za-z]+ ]]; then <br>chmod +x "$(file)" <br>fi <br>done <br>OLDIFS=$IFS <br>IFS=: <br>for path in $( find $(pwd) -type d -printf "%p$IFS") <br>do <br>for file in $path/*.sh $path/*.pl $path/*.bin $path/*.run $path/*.bundle $path/*.rb $path/*.py <br>do <br>if [[ ! "$file" =~ \*.[A-Za-z]+ ]]; then <br>chmod +x "$(path)/$(file)" <br>fi <br>done <br>done <br>IFS=$OLDIFS <br> <br>155.批量执行 <br>#!/bin/bash <br>find -type f \( -iname '*.sh' -o  -iname '*.csh' -o  -iname '*.ksh' -o -iname '*.pl' -o -iname '*.bin' -o -iname '*.run' -o -iname '*.bundle' -o -iname '*.bin' -o -iname '*.class' -o -iname '*.rpm' -o -iname '*.rb' -o -iname '*.py' -o -iname '*.jar' \) -print | <br>while read filename <br>do <br>    case "$filename" in <br>    *.sh | *.csh | *.ksh) <br>if [ ! "./""$(basename $filename)" = $0 ]; then <br>        xterm -e "$filename" <br>fi <br>        ;; <br>    *.pl) <br>        xterm -e perl "$filename" <br>        ;; <br>    *.bin | *.run | *.bundle) <br>        xterm -e "$filename" <br>        ;; <br>    *.class) <br>        xterm -e java "$(dirname "$filename")"/"$(basename "$filename" .class)" <br>        ;; <br>    *.rpm) <br>        xterm -e rpm -ivh "$filename" <br>        ;; <br>    *.rb) <br>        xterm -e ruby "$filename" <br>        ;; <br>    *.py) <br>        xterm -e python "$filename" <br>        ;; <br>    *.jar) <br>        xterm -e java -jar "$filename" <br>        ;; <br>    esac <br>done <br> <br>#!/bin/bash <br>find -maxdepth 1 -type f \( -iname '*.sh' -o -iname '*.pl' -o -iname '*.bin' -o -iname '*.run' -o -iname '*.bundle' -o -iname '*.bin' -o -iname '*.class' -o -iname '*.rpm' -o -iname '*.rb' -o -iname '*.py' -o -iname '*.jar' \) -print <br>while read file <br>do <br>    case "${file##*.}" in <br>        sh ) xterm -e """"$file"""";; <br>        pl ) xterm -e perl """"$file"""";; <br>        bin ) xterm -e """"$file"""";; <br>        run ) xterm -e """"$file"""";; <br>        bundle ) xterm -e """"$file"""";; <br>        class ) xterm -e java """"${file%.*}"""";; <br>        rpm ) xterm -e rpm -ivh """"$file"""";; <br>        rb ) xterm -e ruby """"$file"""";; <br>        py ) xterm -e python """"$file"""";; <br>        jar ) xterm -e java -jar """"$file"""";; <br>    esac <br>done <br> <br>156.获取操作系统版本 <br>#!/bin/bash <br>uname -r <br>#uname -a <br> <br>157.自身复制 <br>#!/bin/bash <br>cp $0 "%%1" <br> <br>158.GCC批量创建静态库 <br>#!/bin/bash <br>find -type f \( -iname '*.c' -o -iname '*.cpp' \) -print | <br>while read filename <br>do <br>    case "$filename" in <br>    *.c) <br>      g++  -c -o "$(dirname "$filename")"/"$(basename "$filename" .c)".o"" "$filename" <br>        ;; <br>    *.cpp) <br>      g++  -c -o "$(dirname "$filename")"/"$(basename "$filename" .cpp)".o"" "$filename" <br>        ;; <br>    esac <br>done <br>OLDIFS=$IFS <br>IFS=: <br>for path in $( find $(pwd) -type d -printf "%p$IFS") <br>do <br>ar ru $path".a" $path"/*.o" && ranlib $path".a" <br>done <br>IFS=$OLDIFS <br>find "$PWD" -type f \( -iname '*.o' \) -print0 | xargs -0 rm -if <br> <br>159.Java批量打包EJB <br>#!/bin/bash <br>find "$PWD" -type f \( -iname '*.java' \) -print0 | xargs -0 javac <br>OLDIFS=$IFS <br>IFS=: <br>for path in $( find $(pwd) -type d -printf "%p$IFS") <br>do <br>jar -cvf "$(path".jar")" "$(path"/*.*")" && cp "$(path".jar")" "$(JBOSS_HOME"/server/default/deploy")" <br>done <br>IFS=$OLDIFS <br> <br>find "$PWD" -type f \( -iname '*.class' \) -print0 | xargs -0 rm -if <br> <br>160.获取环境变量 <br> <br>161.dd <br>#!/bin/bash <br>dd <br> <br>162.显示只有小写字母的文件 <br>#!/bin/bash <br>ls -1|awk '/^[[:lower:]].*/' <br> <br>163.Zip压缩目录中的所有文件 <br>#!/bin/bash <br>direc="%%1" #$(pwd) <br>targetpath="%%2" <br>OLDIFS=$IFS <br>IFS=: <br>for path in $( find $direc -type d -printf "%p$IFS") <br>do <br>mkdir -p "$targetpath/${path:${#direc}+1}" <br>for file in $path/* <br>do <br>if [ -f $file ]; then <br>zip -j "$targetpath/${path:${#direc}+1}/${file:${#path}+1}.zip" "$file" <br>fi <br>done <br>done <br>IFS=$OLDIFS <br> <br>164.Zip解压缩目录中的所有文件 <br>#!/bin/bash <br>direc="%%1" #$(pwd) <br>targetpath="%%2" <br>OLDIFS=$IFS <br>IFS=: <br>for path in $( find $direc -type d -printf "%p$IFS") <br>do <br>mkdir -p "$targetpath/${path:${#direc}+1}" <br>unzip -x "$path/*.zip" -d "$targetpath/${path:${#direc}+1}" <br>done <br>IFS=$OLDIFS <br> <br>165.分布式复制文件夹 <br>#!/bin/bash <br>direc="%%1" #$(pwd) <br>targetpath="%%2" <br>OLDIFS=$IFS <br>IFS=: <br>for path in $( find $direc -type d -printf "%p$IFS") <br>do <br>mkdir -p "$targetpath/${path:${#direc}+1}" <br>rm -if "$targetpath/${path:${#direc}+1}/*.tmp" <br>for file in $path/* <br>do <br>if [ -f $file ]; then <br>cp "$file" "$targetpath/${path:${#direc}+1}/${file:${#path}+1}.tmp" <br>mv "$targetpath/${path:${#direc}+1}/${file:${#path}+1}.tmp" "$targetpath/${path:${#direc}+1}/${file:${#path}+1}" <br>fi <br>done <br>done <br>IFS=$OLDIFS <br> <br>166.注册反注册组件 <br>#!/bin/bash <br>regsvr32 "%%1" <br> <br>167.LZMA <br>#!/bin/bash <br> <br>168.CAB压缩文件 <br>#!/bin/bash <br> <br>169.CAB解压缩文件 <br>#!/bin/bash <br> <br> <br>170.锁定屏幕 <br>#!/bin/sh <br>RUNDLL32.exe USER32,LockWorkStation <br> <br>171.以其它用户的身份运行程序 <br>#!/bin/bash <br> <br>172.添加系统用户 <br>#!/bin/sh <br>useradd "%%1" <br> <br>173.删除系统用户 <br>#!/bin/sh <br>userdel "%%1" <br> <br>174.添加用户组 <br>#!/bin/sh <br>groupadd -g 2000 "%%1" <br> <br>175.删除用户组 <br>#!/bin/sh <br>groupdel "%%1" <br> <br>176.赋予管理员权限 <br>#!/bin/bash <br> <br> <br>177.收回管理员权限 <br>#!/bin/bash <br> <br> <br>178.遍历目录产生删除文件的脚本 <br>#!/bin/bash <br> <br> <br>179.LZW压缩文件 <br>#!/bin/bash <br>z <br> <br>180.LZW解压缩文件 <br>#!/bin/bash <br>z <br> <br>181.递归赋予目录权限 <br>#!/bin/bash <br>direc="%%1" #$(pwd) <br>OLDIFS=$IFS <br>IFS=: <br>for path in $( find $direc -type d -printf "%p$IFS") <br>do <br>chown -R root.root "$path" <br>done <br>IFS=$OLDIFS <br> <br>182.卸载RPM包 <br>#!/bin/sh <br>rpm -e  "%%1" <br> <br>183.删除源文件中的注释 <br>#!/bin/sh <br> <br>184.设置目录下所有文件属性为可写 <br>#!/bin/sh <br> <br>185.统计目录下所有文件的总共行数 <br>#!/bin/sh <br>cat * |wc <br>ls *|xargs wc -l <br>find ./ -name "*c" | xargs wc -l <br> <br>186.删除自身 <br>#!/bin/rm <br>exit 65 <br>#rm $0 <br> <br>187.打开终端 <br>#!/bin/bash -l <br> <br>188.弹出光驱 <br>#!/bin/sh <br>eject <br> <br>189.收回光驱 <br>#!/bin/sh <br>eject -t <br> <br>190.磁盘总空间计算 <br> <br>191.解析CSV文件 <br> <br>192.按行保存文件为数组 <br> <br>193.MySQL执行SQL文件 <br>mysqladmin -u %%1 -p%%2 < %%3.sql <br> <br>mysql -u %%1 -p%%2 -e "SOURCE %%3.sql" </div> <br> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1281976150360342528"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(Linux)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835513699826233344.htm" title="android系统selinux中添加新属性property" target="_blank">android系统selinux中添加新属性property</a> <span class="text-muted">辉色投像</span> <div>1.定位/android/system/sepolicy/private/property_contexts声明属性开头:persist.charge声明属性类型:u:object_r:system_prop:s0图12.定位到android/system/sepolicy/public/domain.te删除neverallow{domain-init}default_prop:property</div> </li> <li><a href="/article/1835509391361667072.htm" title="Linux下QT开发的动态库界面弹出操作(SDL2)" target="_blank">Linux下QT开发的动态库界面弹出操作(SDL2)</a> <span class="text-muted">13jjyao</span> <a class="tag" taget="_blank" href="/search/QT%E7%B1%BB/1.htm">QT类</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/sdl2/1.htm">sdl2</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>需求:操作系统为linux,开发框架为qt,做成需带界面的qt动态库,调用方为java等非qt程序难点:调用方为java等非qt程序,也就是说调用方肯定不带QApplication::exec(),缺少了这个,QTimer等事件和QT创建的窗口将不能弹出(包括opencv也是不能弹出);这与qt调用本身qt库是有本质的区别的思路:1.调用方缺QApplication::exec(),那么我们在接口</div> </li> <li><a href="/article/1835504596898902016.htm" title="linux sdl windows.h,Windows下的SDL安装" target="_blank">linux sdl windows.h,Windows下的SDL安装</a> <span class="text-muted">奔跑吧linux内核</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/sdl/1.htm">sdl</a><a class="tag" taget="_blank" href="/search/windows.h/1.htm">windows.h</a> <div>首先你要下载并安装SDL开发包。如果装在C盘下,路径为C:\SDL1.2.5如果在WINDOWS下。你可以按以下步骤:1.打开VC++,点击"Tools",Options2,点击directories选项3.选择"Includefiles"增加一个新的路径。"C:\SDL1.2.5\include"4,现在选择"Libaryfiles“增加"C:\SDL1.2.5\lib"现在你可以开始编写你的第</div> </li> <li><a href="/article/1835503712899002368.htm" title="linux中sdl的使用教程,sdl使用入门" target="_blank">linux中sdl的使用教程,sdl使用入门</a> <span class="text-muted">Melissa Corvinus</span> <a class="tag" taget="_blank" href="/search/linux%E4%B8%ADsdl%E7%9A%84%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/1.htm">linux中sdl的使用教程</a> <div>本文通过一个简单示例讲解SDL的基本使用流程。示例中展示一个窗口,窗口里面有个随机颜色快随机移动。当我们鼠标点击关闭按钮时间窗口关闭。基本步骤如下:1.初始化SDL并创建一个窗口。SDL_Init()初始化SDL_CreateWindow()创建窗口2.纹理渲染存储RGB和存储纹理的区别:比如一个从左到右由红色渐变到蓝色的矩形,用存储RGB的话就需要把矩形中每个点的具体颜色值存储下来;而纹理只是一</div> </li> <li><a href="/article/1835502578050363392.htm" title="PHP环境搭建详细教程" target="_blank">PHP环境搭建详细教程</a> <span class="text-muted">好看资源平台</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a> <div>PHP是一个流行的服务器端脚本语言,广泛用于Web开发。为了使PHP能够在本地或服务器上运行,我们需要搭建一个合适的PHP环境。本教程将结合最新资料,介绍在不同操作系统上搭建PHP开发环境的多种方法,包括Windows、macOS和Linux系统的安装步骤,以及本地和Docker环境的配置。1.PHP环境搭建概述PHP环境的搭建主要分为以下几类:集成开发环境:例如XAMPP、WAMP、MAMP,这</div> </li> <li><a href="/article/1835501948011376640.htm" title="使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)" target="_blank">使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)</a> <span class="text-muted">编程经验分享</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/1.htm">开发工具</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/ssh/1.htm">ssh</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>目录前言基本使用教程新建远程连接连接主机自定义命令路由追踪前言后端开发,必然需要和服务器打交道,部署应用,排查问题,查看运行日志等等。一般服务器都是集中部署在机房中,也有一些直接是云服务器,总而言之,程序员不可能直接和服务器直接操作,一般都是通过ssh连接来登录服务器。刚接触远程连接时,使用的是XSHELL来远程连接服务器,连接上就能够操作远程服务器了,但是仅用XSHELL并没有上传下载文件的功能</div> </li> <li><a href="/article/1835493373906087936.htm" title="libyuv之linux编译" target="_blank">libyuv之linux编译</a> <span class="text-muted">jaronho</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>文章目录一、下载源码二、编译源码三、注意事项1、银河麒麟系统(aarch64)(1)解决armv8-a+dotprod+i8mm指令集支持问题(2)解决armv9-a+sve2指令集支持问题一、下载源码到GitHub网站下载https://github.com/lemenkov/libyuv源码,或者用直接用git克隆到本地,如:gitclonehttps://github.com/lemenko</div> </li> <li><a href="/article/1835489588169240576.htm" title="ARM驱动学习之5 LEDS驱动" target="_blank">ARM驱动学习之5 LEDS驱动</a> <span class="text-muted">JT灬新一</span> <a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/C/1.htm">C</a><a class="tag" taget="_blank" href="/search/%E5%BA%95%E5%B1%82/1.htm">底层</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a> <div>ARM驱动学习之5LEDS驱动知识点:•linuxGPIO申请函数和赋值函数–gpio_request–gpio_set_value•三星平台配置GPIO函数–s3c_gpio_cfgpin•GPIO配置输出模式的宏变量–S3C_GPIO_OUTPUT注意点:DRIVER_NAME和DEVICE_NAME匹配。实现步骤:1.加入需要的头文件://Linux平台的gpio头文件#include//三</div> </li> <li><a href="/article/1835485681187647488.htm" title="【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面" target="_blank">【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面</a> <span class="text-muted">一个射手座的程序媛</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>最后的话最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!资料预览给大家整理的视频资料:给大家整理的电子书资料:如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以点击这里获</div> </li> <li><a href="/article/1835482277870661632.htm" title="简介Shell、zsh、bash" target="_blank">简介Shell、zsh、bash</a> <span class="text-muted">zhaosuningsn</span> <a class="tag" taget="_blank" href="/search/Shell/1.htm">Shell</a><a class="tag" taget="_blank" href="/search/zsh/1.htm">zsh</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a> <div>Shell是Linux和Unix的外壳,类似衣服,负责外界与Linux和Unix内核的交互联系。例如接收终端用户及各种应用程序的命令,把接收的命令翻译成内核能理解的语言,传递给内核,并把内核处理接收的命令的结果返回给外界,即Shell是外界和内核沟通的桥梁或大门。Linux和Unix提供了多种Shell,其中有种bash,当然还有其他好多种。Mac电脑中不但有bash,还有一个zsh,预装的,据说</div> </li> <li><a href="/article/1835479000600899584.htm" title="Linux MariaDB使用OpenSSL安装SSL证书" target="_blank">Linux MariaDB使用OpenSSL安装SSL证书</a> <span class="text-muted">Meta39</span> <a class="tag" taget="_blank" href="/search/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/Oracle/1.htm">Oracle</a><a class="tag" taget="_blank" href="/search/MariaDB/1.htm">MariaDB</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/Windows/1.htm">Windows</a><a class="tag" taget="_blank" href="/search/ssl/1.htm">ssl</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/mariadb/1.htm">mariadb</a> <div>进入到证书存放目录,批量删除.pem证书警告:确保已经进入到证书存放目录find.-typef-iname\*.pem-delete查看是否安装OpenSSLopensslversion没有则安装yuminstallopensslopenssl-devel开启SSL编辑/etc/my.cnf文件(没有的话就创建,但是要注意,在/etc/my.cnf.d/server.cnf配置了datadir的,</div> </li> <li><a href="/article/1835469294436184064.htm" title="【从浅识到熟知Linux】Linux发展史" target="_blank">【从浅识到熟知Linux】Linux发展史</a> <span class="text-muted">Jammingpro</span> <a class="tag" taget="_blank" href="/search/%E4%BB%8E%E6%B5%85%E5%AD%A6%E5%88%B0%E7%86%9F%E7%9F%A5Linux/1.htm">从浅学到熟知Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>归属专栏:从浅学到熟知Linux个人主页:Jammingpro每日努力一点点,技术变化看得见文章前言:本篇文章记录Linux发展的历史,因在介绍Linux过程中涉及的其他操作系统及人物,本文对相关内容也有所介绍。文章目录Unix发展史Linux发展史开源Linux官网企业应用情况发行版本在学习Linux前,我们可能都会问Linux从哪里来?它是如何发展的。但在介绍Linux之前,需要先介绍一下Un</div> </li> <li><a href="/article/1835467782687387648.htm" title="linux 发展史" target="_blank">linux 发展史</a> <span class="text-muted">种树的猴子</span> <a class="tag" taget="_blank" href="/search/%E5%86%85%E6%A0%B8/1.htm">内核</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">操作系统</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>linux发展史说明此前对linux认识模糊一知半解,近期通过学习将自己对于linux的发展总结一下方便大家日后的学习。那Linux是目前一款非常火热的开源操作系统,可是linux是什么时候出现的,又是因为什么样的原因被开发出来的呢。以下将对linux的发展历程进行详细的讲解。目录一、Linux发展背景二、UINIX的诞生三、UNIX的重要分支-BSD的诞生四、Minix的诞生五、GNU与Free</div> </li> <li><a href="/article/1835466523163062272.htm" title="Linux sh命令" target="_blank">Linux sh命令</a> <span class="text-muted">fengyehongWorld</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>目录一.基本语法二.选项2.1-c字符串中读取内容,并执行2.1.1基本用法2.1.2获取当前目录下失效的超链接2.2-x每个命令执行之前,将其打印出来2.3结合Here文档使用一.基本语法⏹Linux和Unix系统中用于执行shell脚本或运行命令的命令。sh[选项][脚本文件][参数...]⏹选项-c:从字符串中读取内容,并执行。-x:在每个命令执行之前,将其打印出来。-s:从标准流中读取内容</div> </li> <li><a href="/article/1835466270955368448.htm" title="Linux vi常用命令" target="_blank">Linux vi常用命令</a> <span class="text-muted">fengyehongWorld</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>参考资料viコマンド(vimコマンド)リファレンス目录一.保存系命令二.删除系命令三.移动系命令四.复制粘贴系命令一.保存系命令⏹保存并退出:wq⏹强制保存并退出:wq!⏹退出(文件未编辑):q⏹强制退出(忽略已编辑内容):q!⏹另存为:w新文件名二.删除系命令⏹删除当前行dd⏹清空整个文档gg:移动到文档顶部dG:删除到最后一行ggdG三.移动系命令⏹移动到文档顶部gg⏹移动到文档底部#方式1G</div> </li> <li><a href="/article/1835452402178813952.htm" title="Linux查看服务器日志" target="_blank">Linux查看服务器日志</a> <span class="text-muted">TPBoreas</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>一、tail这个是我最常用的一种查看方式用法如下:tail-n10test.log查询日志尾部最后10行的日志;tail-n+10test.log查询10行之后的所有日志;tail-fn10test.log循环实时查看最后1000行记录(最常用的)一般还会配合着grep用,(实时抓包)例如:tail-fn1000test.log|grep'关键字'(动态抓包)tail-fn1000test.log</div> </li> <li><a href="/article/1835443696431099904.htm" title="笋丁网页自动回复机器人V3.0.0免授权版源码" target="_blank">笋丁网页自动回复机器人V3.0.0免授权版源码</a> <span class="text-muted">希希分享</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E5%B8%8C%E7%BD%9158soho_cn/1.htm">软希网58soho_cn</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E8%B5%84%E6%BA%90/1.htm">源码资源</a><a class="tag" taget="_blank" href="/search/%E7%AC%8B%E4%B8%81%E7%BD%91%E9%A1%B5%E8%87%AA%E5%8A%A8%E5%9B%9E%E5%A4%8D%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">笋丁网页自动回复机器人</a> <div>笋丁网页机器人一款可设置自动回复,默认消息,调用自定义api接口的网页机器人。此程序后端语言使用Golang,内存占用最高不超过30MB,1H1G服务器流畅运行。仅支持Linux服务器部署,不支持虚拟主机,请悉知!使用自定义api功能需要有一定的建站基础。源码下载:https://download.csdn.net/download/m0_66047725/89754250更多资源下载:关注我。安</div> </li> <li><a href="/article/1835417097660887040.htm" title="Linux CTF逆向入门" target="_blank">Linux CTF逆向入门</a> <span class="text-muted">蚁景网络安全</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/CTF/1.htm">CTF</a> <div>1.ELF格式我们先来看看ELF文件头,如果想详细了解,可以查看ELF的manpage文档。关于ELF更详细的说明:e_shoff:节头表的文件偏移量(字节)。如果文件没有节头表,则此成员值为零。sh_offset:表示了该section(节)离开文件头部位置的距离+-------------------+|ELFheader|---++--------->+-------------------</div> </li> <li><a href="/article/1835415332345442304.htm" title="NPM私库搭建-verdaccio(Linux)" target="_blank">NPM私库搭建-verdaccio(Linux)</a> <span class="text-muted">Beam007</span> <a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>1、安装nodelinux服务器安装nodea)、官网下载所需的node版本https://nodejs.org/dist/v14.21.0/b)、解压安装包若下载的是xxx.tar.xz文件,解压命令为tar-xvfxxx.tar.xzc)、修改环境变量修改:/etc/profile文件#SETPATHFORNODEJSexportNODE_HOME=NODEJS解压安装的路径exportPAT</div> </li> <li><a href="/article/1835400463676174336.htm" title="C++常见知识掌握" target="_blank">C++常见知识掌握</a> <span class="text-muted">nfgo</span> <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>1.Linux软件开发、调试与维护内核与系统结构Linux内核是操作系统的核心,负责管理硬件资源,提供系统服务,它是系统软件与硬件之间的桥梁。主要组成部分包括:进程管理:内核通过调度器分配CPU时间给各个进程,实现进程的创建、调度、终止等操作。使用进程描述符(task_struct)来存储进程信息,包括状态(就绪、运行、阻塞等)、优先级、内存映射等。内存管理:包括物理内存和虚拟内存管理。通过页表映</div> </li> <li><a href="/article/1835399577818198016.htm" title="linux脚本sed替换变量,sed 命令中替换值为shell变量" target="_blank">linux脚本sed替换变量,sed 命令中替换值为shell变量</a> <span class="text-muted">诺坎普之约</span> <a class="tag" taget="_blank" href="/search/linux%E8%84%9A%E6%9C%ACsed%E6%9B%BF%E6%8D%A2%E5%8F%98%E9%87%8F/1.htm">linux脚本sed替换变量</a> <div>文章目录sed命令中替换值为shell变量替换基本语法sed中替换使用shell变量总结参考文档sed命令中替换值为shell变量替换基本语法大家都是sed有很多用法,最多就应该是替换一些值了。让我们先回忆sed的替换语法。在sed进行替换的时候sed-i's/old/new/g'1.txtecho"hellooldfrank"|sed's/old/new/g'结果如下:hellonewfrank</div> </li> <li><a href="/article/1835398694636187648.htm" title="RK3229_Android9.0_Box 4G模块EC200A调试" target="_blank">RK3229_Android9.0_Box 4G模块EC200A调试</a> <span class="text-muted">suifen_</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>0、kernel修改这部分完全可以参考Linux的移植:RK3588EC200A-CN【4G模块】调试_rkec200a-cn-CSDN博客1、修改device/rockchip/rk322xdiff--gita/device.mkb/device.mkindexec6bfaa..e7c32d1100755---a/device.mk+++b/device.mk@@-105,6+105,8@@en</div> </li> <li><a href="/article/1835390878806536192.htm" title="linux 安装Sublime Text 3" target="_blank">linux 安装Sublime Text 3</a> <span class="text-muted">hhyiyuanyu</span> <a class="tag" taget="_blank" href="/search/Python%E5%AD%A6%E4%B9%A0/1.htm">Python学习</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/sublime/1.htm">sublime</a><a class="tag" taget="_blank" href="/search/text/1.htm">text</a> <div>方法/步骤打开官网http://www.sublimetext.com/3,选择64位进行下载执行命令wgethttps://download.sublimetext.com/sublime_text_3_build_3126_x64.tar.bz2进行下载3、下载完成进行解压,执行tar-xvvfsublime_text_3_build_3126_x64.tar.bz解压4、解压完成以后,移动到</div> </li> <li><a href="/article/1835378901174546432.htm" title="KVM虚拟机源代码分析【转】" target="_blank">KVM虚拟机源代码分析【转】</a> <span class="text-muted">xidianjiapei001</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E5%8C%96%E6%8A%80%E6%9C%AF/1.htm">虚拟化技术</a> <div>1.KVM结构及工作原理1.1KVM结构KVM基本结构有两部分组成。一个是KVMDriver,已经成为Linux内核的一个模块。负责虚拟机的创建,虚拟内存的分配,虚拟CPU寄存器的读写以及虚拟CPU的运行等。另外一个是稍微修改过的Qemu,用于模拟PC硬件的用户空间组件,提供I/O设备模型以及访问外设的途径。KVM基本结构如图1所示。其中KVM加入到标准的Linux内核中,被组织成Linux中标准</div> </li> <li><a href="/article/1835369569800253440.htm" title="史上最全git命令,git回滚,git命令大全" target="_blank">史上最全git命令,git回滚,git命令大全</a> <span class="text-muted">騒周</span> <a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96/1.htm">其他</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>git命令大全一、Git整体理解二、由暂存区本地仓库三、由本地仓->远程仓库四、冲突处理五、Git分支操作六、bug的分支七、feature分支八、暂存的使用九、远程仓的操作十、标签的使用十一、Git配置全局信息十二、Linux的一些简单操作和一些符号的解释十三、符号解释十四、显示安装详细信息十五、gitconfig十六、Gitclone十七、Gitinit十八、gitstatus十九、gitre</div> </li> <li><a href="/article/1835369443379736576.htm" title="【显示 后台运行 & 的命令】" target="_blank">【显示 后台运行 & 的命令】</a> <span class="text-muted">晨春计</span> <a class="tag" taget="_blank" href="/search/debug/1.htm">debug</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>目录背景步骤详解示例背景当你在Linuxshell中使用&符号将一个命令放到后台运行时,你可以使用jobs命令来查看这些后台进程的状态。但是,jobs命令并不会直接显示进程的PID(进程ID)。它会显示一个作业列表,其中包括每个作业的状态和一个作业标识符(通常是百分号%后面跟着一个数字),但不会直接显示PID。获取后台进程的PID步骤:1、使用jobs命令查看后台作业。2、使用ps命令配合grep</div> </li> <li><a href="/article/1835369316342657024.htm" title="Android shell 常用 debug 命令" target="_blank">Android shell 常用 debug 命令</a> <span class="text-muted">晨春计</span> <a class="tag" taget="_blank" href="/search/Audio/1.htm">Audio</a><a class="tag" taget="_blank" href="/search/debug/1.htm">debug</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>目录1、查看版本2、am命令3、pm命令4、dumpsys命令5、sed命令6、log定位查看APK进程号7、log定位使用场景1、查看版本1.1、Android串口终端执行getpropro.build.version.release#获取Android版本uname-a#查看linux内核版本信息uname-r#单独查看内核版本1.2、linux服务器执行lsb_release-a#查看Lin</div> </li> <li><a href="/article/1835353690366636032.htm" title="【nginx】ngx_http_proxy_connect_module 正向代理" target="_blank">【nginx】ngx_http_proxy_connect_module 正向代理</a> <span class="text-muted">等风来不如迎风去</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E6%9C%8D%E5%8A%A1%E5%85%A5%E9%97%A8%E4%B8%8E%E5%AE%9E%E6%88%98/1.htm">网络服务入门与实战</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>50.65无法访问服务器,(403错误)50.196可以访问服务器。那么,配置65通过196访问。需要一个nginx作为代理【nginx】搭配okhttp配置反向代理发送原生的nginx是不支持okhttp的CONNECT请求的。大神竟然给出了一个java工程GINX编译ngx_http_proxy_connect_module及做正向代理是linux构建的。是windows构建的:编译Windo</div> </li> <li><a href="/article/1835336292490113024.htm" title="linux下好用的任务管理器htop" target="_blank">linux下好用的任务管理器htop</a> <span class="text-muted">WittXie</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>给大家推荐个好用的任务管理器htop,简直好用的不得了。完虐top。不解释了,看文章!!!在Linux系统中,top命令用来显示系统中正在运行的进程的实时状态,它显示了一些非常有用的信息,比如CPU利用情况、内存消耗情况,以及每个进程情况等。但是,你知道吗?还有另外一个命令行工具'htop',它与传统的top命令功能一样,但它有更加强大的功能及能显示更多的信息。这篇文章,我们会用实例来讨论这个'h</div> </li> <li><a href="/article/1835335914407161856.htm" title="Linux下使用U盘" target="_blank">Linux下使用U盘</a> <span class="text-muted">WittXie</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>第一步:插入U盘,如果能够识别出U盘,则会打印出一些信息;第二步:查看U盘系统分配给U盘的设备名;输入如下命令进行查看:fdisk-l/dev/sda如果打印出如下信息:Disk/dev/sda:4233MB,4233101312bytes165heads,34sectors/track,1473cylindersUnits=cylindersof5610*512=2872320bytesDevi</div> </li> <li><a href="/article/18.htm" title="jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque" target="_blank">jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque</a> <span class="text-muted">qiaolevip</span> <a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/%E8%B7%A8%E5%9F%9F/1.htm">跨域</a><a class="tag" taget="_blank" href="/search/%E4%BC%97%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">众观千象</a> <div>XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. test.html:1 </div> </li> <li><a href="/article/145.htm" title="mysql 分区查询优化" target="_blank">mysql 分区查询优化</a> <span class="text-muted">annan211</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%8C%BA/1.htm">分区</a><a class="tag" taget="_blank" href="/search/%E4%BC%98%E5%8C%96/1.htm">优化</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> 分区查询优化 引入分区可以给查询带来一定的优势,但同时也会引入一些bug. 分区最大的优点就是优化器可以根据分区函数来过滤掉一些分区,通过分区过滤可以让查询扫描更少的数据。 所以,对于访问分区表来说,很重要的一点是要在where 条件中带入分区,让优化器过滤掉无需访问的分区。 可以通过查看explain执行计划,是否携带 partitions</div> </li> <li><a href="/article/272.htm" title="MYSQL存储过程中使用游标" target="_blank">MYSQL存储过程中使用游标</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/Mysql%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B/1.htm">Mysql存储过程</a> <div>DELIMITER $$ DROP PROCEDURE IF EXISTS getUserInfo $$ CREATE PROCEDURE getUserInfo(in date_day datetime)-- -- 实例-- 存储过程名为:getUserInfo-- 参数为:date_day日期格式:2008-03-08--    BEGINdecla</div> </li> <li><a href="/article/399.htm" title="mysql 和 sqlite 区别" target="_blank">mysql 和 sqlite 区别</a> <span class="text-muted">Array_06</span> <a class="tag" taget="_blank" href="/search/sqlite/1.htm">sqlite</a> <div>转载: http://www.cnblogs.com/ygm900/p/3460663.html mysql 和 sqlite 区别 SQLITE是单机数据库。功能简约,小型化,追求最大磁盘效率 MYSQL是完善的服务器数据库。功能全面,综合化,追求最大并发效率 MYSQL、Sybase、Oracle等这些都是试用于服务器数据量大功能多需要安装,例如网站访问量比较大的。而sq</div> </li> <li><a href="/article/526.htm" title="pinyin4j使用" target="_blank">pinyin4j使用</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/pinyin4j/1.htm">pinyin4j</a> <div>首先需要pinyin4j的jar包支持;jar包已上传至附件内 方法一:把汉字转换为拼音;例如:编程转换后则为biancheng      /** * 将汉字转换为全拼 * @param src 你的需要转换的汉字 * @param isUPPERCASE 是否转换为大写的拼音; true:转换为大写;fal</div> </li> <li><a href="/article/653.htm" title="微博发送私信" target="_blank">微博发送私信</a> <span class="text-muted">随意而生</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E5%8D%9A/1.htm">微博</a> <div>在前面文章中说了如和获取登陆时候所需要的cookie,现在只要拿到最后登陆所需要的cookie,然后抓包分析一下微博私信发送界面 http://weibo.com/message/history?uid=****&name=**** 可以发现其发送提交的Post请求和其中的数据, 让后用程序模拟发送POST请求中的数据,带着cookie发送到私信的接入口,就可以实现发私信的功能了。 </div> </li> <li><a href="/article/780.htm" title="jsp" target="_blank">jsp</a> <span class="text-muted">香水浓</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a> <div>JSP初始化     容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了 JSP执行     这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。     当JSP网页完成初始化后</div> </li> <li><a href="/article/907.htm" title="在 Windows 上安装 SVN Subversion 服务端" target="_blank">在 Windows 上安装 SVN Subversion 服务端</a> <span class="text-muted">AdyZhang</span> <a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a> <div>在 Windows 上安装 SVN Subversion 服务端2009-09-16高宏伟哈尔滨市道里区通达街291号   最佳阅读效果请访问原地址:http://blog.donews.com/dukejoe/archive/2009/09/16/1560917.aspx   现在的Subversion已经足够稳定,而且已经进入了它的黄金时段。我们看到大量的项目都在使</div> </li> <li><a href="/article/1034.htm" title="android开发中如何使用 alertDialog从listView中删除数据?" target="_blank">android开发中如何使用 alertDialog从listView中删除数据?</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>我现在使用listView展示了很多的配置信息,我现在想在点击其中一条的时候填出 alertDialog,点击确认后就删除该条数据,( ArrayAdapter ,ArrayList,listView 全部删除),我知道在 下面的onItemLongClick 方法中 参数 arg2  是选中的序号,但是我不知道如何继续处理下去 1 2 3 </div> </li> <li><a href="/article/1161.htm" title="jdk-6u26-linux-x64.bin 安装" target="_blank">jdk-6u26-linux-x64.bin 安装</a> <span class="text-muted">baalwolf</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>1.上传安装文件(jdk-6u26-linux-x64.bin) 2.修改权限 [root@localhost ~]# ls -l /usr/local/jdk-6u26-linux-x64.bin 3.执行安装文件 [root@localhost ~]# cd /usr/local [root@localhost local]# ./jdk-6u26-linux-x64.bin&nbs</div> </li> <li><a href="/article/1288.htm" title="MongoDB经典面试题集锦" target="_blank">MongoDB经典面试题集锦</a> <span class="text-muted">BigBird2012</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>1.什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库? NoSQL是非关系型数据库,NoSQL = Not Only SQL。 关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据。 在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑使用NoSQL数据库。 在考虑数据库的成熟</div> </li> <li><a href="/article/1415.htm" title="JavaScript异步编程Promise模式的6个特性" target="_blank">JavaScript异步编程Promise模式的6个特性</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Promise/1.htm">Promise</a> <div>        Promise是一个非常有价值的构造器,能够帮助你避免使用镶套匿名方法,而使用更具有可读性的方式组装异步代码。这里我们将介绍6个最简单的特性。         在我们开始正式介绍之前,我们想看看Javascript Promise的样子: var p = new Promise(function(r</div> </li> <li><a href="/article/1542.htm" title="[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager" target="_blank">[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a> <div>ClientWatchManager接口 //接口的唯一方法materialize用于确定那些Watcher需要被通知 //确定Watcher需要三方面的因素1.事件状态 2.事件类型 3.znode的path public interface ClientWatchManager { /** * Return a set of watchers that should</div> </li> <li><a href="/article/1669.htm" title="【Scala十五】Scala核心九:隐式转换之二" target="_blank">【Scala十五】Scala核心九:隐式转换之二</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>隐式转换存在的必要性,   在Java Swing中,按钮点击事件的处理,转换为Scala的的写法如下:   val button = new JButton button.addActionListener( new ActionListener { def actionPerformed(event: ActionEvent) { </div> </li> <li><a href="/article/1796.htm" title="Android JSON数据的解析与封装小Demo" target="_blank">Android JSON数据的解析与封装小Demo</a> <span class="text-muted">ronin47</span> <div>转自:http://www.open-open.com/lib/view/open1420529336406.html package com.example.jsondemo; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;    impor</div> </li> <li><a href="/article/1923.htm" title="[设计]字体创意设计方法谈" target="_blank">[设计]字体创意设计方法谈</a> <span class="text-muted">brotherlamp</span> <a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/ui%E8%87%AA%E5%AD%A6/1.htm">ui自学</a><a class="tag" taget="_blank" href="/search/ui%E8%A7%86%E9%A2%91/1.htm">ui视频</a><a class="tag" taget="_blank" href="/search/ui%E6%95%99%E7%A8%8B/1.htm">ui教程</a><a class="tag" taget="_blank" href="/search/ui%E8%B5%84%E6%96%99/1.htm">ui资料</a> <div>  从古至今,文字在我们的生活中是必不可少的事物,我们不能想象没有文字的世界将会是怎样。在平面设计中,UI设计师在文字上所花的心思和功夫最多,因为文字能直观地表达UI设计师所的意念。在文字上的创造设计,直接反映出平面作品的主题。 如设计一幅戴尔笔记本电脑的广告海报,假设海报上没有出现“戴尔”两个文字,即使放上所有戴尔笔记本电脑的图片都不能让人们得知这些电脑是什么品牌。只要写上“戴尔笔</div> </li> <li><a href="/article/2050.htm" title="单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值" target="_blank">单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a> <div>import java.util.LinkedList; /* 单调队列 滑动窗口 单调队列是这样的一个队列:队列里面的元素是有序的,是递增或者递减 题目:给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求:f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0,1,...,N-1 问题的另一种描述就</div> </li> <li><a href="/article/2177.htm" title="struts2处理一个form多个submit" target="_blank">struts2处理一个form多个submit</a> <span class="text-muted">chiangfai</span> <a class="tag" taget="_blank" href="/search/struts2/1.htm">struts2</a> <div>web应用中,为完成不同工作,一个jsp的form标签可能有多个submit。如下代码: <s:form action="submit" method="post" namespace="/my"> <s:textfield name="msg" label="叙述:"></div> </li> <li><a href="/article/2304.htm" title="shell查找上个月,陷阱及野路子" target="_blank">shell查找上个月,陷阱及野路子</a> <span class="text-muted">chenchao051</span> <a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a> <div>date -d "-1 month" +%F     以上这段代码,假如在2012/10/31执行,结果并不会出现你预计的9月份,而是会出现八月份,原因是10月份有31天,9月份30天,所以-1 month在10月份看来要减去31天,所以直接到了8月31日这天,这不靠谱。     野路子解决:假设当天日期大于15号</div> </li> <li><a href="/article/2431.htm" title="mysql导出数据中文乱码问题" target="_blank">mysql导出数据中文乱码问题</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">中文乱码</a><a class="tag" taget="_blank" href="/search/%E5%AF%BC%E6%95%B0%E6%8D%AE/1.htm">导数据</a> <div>解决mysql导入导出数据乱码问题方法: 1、进入mysql,通过如下命令查看数据库编码方式: mysql>  show variables like 'character_set_%'; +--------------------------+----------------------------------------+ | Variable_name&nbs</div> </li> <li><a href="/article/2558.htm" title="SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write" target="_blank">SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/smarty/1.htm">smarty</a><a class="tag" taget="_blank" href="/search/sae/1.htm">sae</a> <div>  对于SAE出现的问题:Uncaught exception 'SmartyException' with message 'unable to write file...。 官方给出了详细的FAQ:http://sae.sina.com.cn/?m=faqs&catId=11#show_213 解决方案为:   01 $path </div> </li> <li><a href="/article/2685.htm" title="《教父》系列台词" target="_blank">《教父》系列台词</a> <span class="text-muted">dcj3sjt126com</span> <div>Your love is also your weak point. 你的所爱同时也是你的弱点。   If anything in this life is certain, if history has taught us anything, it is that you can kill anyone.   不顾家的人永远不可能成为一个真正的男人。 &</div> </li> <li><a href="/article/2812.htm" title="mongodb安装与使用" target="_blank">mongodb安装与使用</a> <span class="text-muted">dyy_gusi</span> <a class="tag" taget="_blank" href="/search/mongo/1.htm">mongo</a> <div>一.MongoDB安装和启动,widndows和linux基本相同 1.下载数据库,     linux:mongodb-linux-x86_64-ubuntu1404-3.0.3.tgz 2.解压文件,并且放置到合适的位置     tar -vxf mongodb-linux-x86_64-ubun</div> </li> <li><a href="/article/2939.htm" title="Git排除目录" target="_blank">Git排除目录</a> <span class="text-muted">geeksun</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>在Git的版本控制中,可能有些文件是不需要加入控制的,那我们在提交代码时就需要忽略这些文件,下面讲讲应该怎么给Git配置一些忽略规则。   有三种方法可以忽略掉这些文件,这三种方法都能达到目的,只不过适用情景不一样。 1.  针对单一工程排除文件 这种方式会让这个工程的所有修改者在克隆代码的同时,也能克隆到过滤规则,而不用自己再写一份,这就能保证所有修改者应用的都是同一</div> </li> <li><a href="/article/3066.htm" title="Ubuntu 创建开机自启动脚本的方法" target="_blank">Ubuntu 创建开机自启动脚本的方法</a> <span class="text-muted">hongtoushizi</span> <a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a> <div>转载自: http://rongjih.blog.163.com/blog/static/33574461201111504843245/ Ubuntu 创建开机自启动脚本的步骤如下: 1) 将你的启动脚本复制到 /etc/init.d目录下 以下假设你的脚本文件名为 test。   2) 设置脚本文件的权限 $ sudo chmod 755</div> </li> <li><a href="/article/3193.htm" title="第八章 流量复制/AB测试/协程" target="_blank">第八章 流量复制/AB测试/协程</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/coroutine/1.htm">coroutine</a> <div>流量复制 在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线。这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流;另外我们还可以使用nginx的HttpLuaModule模块中的ngx.location.capture_multi进行并发</div> </li> <li><a href="/article/3320.htm" title="电商系统商品表设计" target="_blank">电商系统商品表设计</a> <span class="text-muted">lkl</span> <div>DROP TABLE IF EXISTS `category`; -- 类目表 /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `category` ( `id` int(11) NOT NUL</div> </li> <li><a href="/article/3447.htm" title="修改phpMyAdmin导入SQL文件的大小限制" target="_blank">修改phpMyAdmin导入SQL文件的大小限制</a> <span class="text-muted">pda158</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> 用phpMyAdmin导入mysql数据库时,我的10M的 数据库不能导入,提示mysql数据库最大只能导入2M。    phpMyAdmin数据库导入出错:   You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit. </div> </li> <li><a href="/article/3574.htm" title="Tomcat性能调优方案" target="_blank">Tomcat性能调优方案</a> <span class="text-muted">Sobfist</span> <a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a> <div>一、操作系统调优 对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。 【适用场景】 任何项目。 二、Java虚拟机调优 应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。 J</div> </li> <li><a href="/article/3701.htm" title="SQLServer学习笔记" target="_blank">SQLServer学习笔记</a> <span class="text-muted">vipbooks</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div>1、create database school 创建数据库school 2、drop database school 删除数据库school 3、use school 连接到school数据库,使其成为当前数据库 4、create table class(classID int primary key identity not null) 创建一个名为class的表,其有一</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>