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/1950227023859347456.htm" title="Linux系统配置(应用程序)" target="_blank">Linux系统配置(应用程序)</a> <span class="text-muted">1风天云月</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/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F/1.htm">应用程序</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85/1.htm">编译安装</a><a class="tag" taget="_blank" href="/search/rpm/1.htm">rpm</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a> <div>目录前言一、应用程序概述1、命令与程序的关系2、程序的组成3、软件包封装类型二、RPM1、RPM概述2、RPM用法三、编译安装1、解包2、配置3、编译4、安装5、启用httpd服务结语前言在Linux中的应用程序被视为将软件包安装到系统中后产生的各种文档,其中包括可执行文件、配置文件、用户手册等内容,这些文档被组织为一个有机的整体,为用户提供特定的功能,因此对于“安装软件包”与“安装应用程序”这两</div> </li> <li><a href="/article/1950219166367674368.htm" title="包含日志获取webshell" target="_blank">包含日志获取webshell</a> <span class="text-muted">陈望_ning</span> <div>日志文件关闭:Apache目录下的httpd.conf文件#ErrorLog"logs/error.log"#CustomLog"logs/access.log"common加#号为注释不产生日志文件如果去掉#将会在Apache/logs/目录下产生日志文件linux:access_logerror_logwindows:access.logerror.logaccess_log每一行记录了一次网</div> </li> <li><a href="/article/1950209621381672960.htm" title="Android 应用权限管理详解" target="_blank">Android 应用权限管理详解</a> <span class="text-muted"></span> <div>文章目录1.权限类型2.权限请求机制3.权限组和分级4.权限管理的演进5.权限监控和SELinux强制访问控制6.应用权限审核和GooglePlayProtect7.开发者最佳实践8.用户权限管理9.Android应用沙箱模型10.ScopedStorage(分区存储)11.背景位置权限(BackgroundLocationAccess)12.权限回收和自动清理13.权限请求的用户体验设计14.G</div> </li> <li><a href="/article/1950202054706262016.htm" title="centos7安装配置 Anaconda3" target="_blank">centos7安装配置 Anaconda3</a> <span class="text-muted"></span> <div>Anaconda是一个用于科学计算的Python发行版,Anaconda于Python,相当于centos于linux。下载[root@testsrc]#mwgethttps://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.shBegintodownload:Anaconda3-5.2.0-L</div> </li> <li><a href="/article/1950175199089455104.htm" title="PDF转Markdown - Python 实现方案与代码" target="_blank">PDF转Markdown - Python 实现方案与代码</a> <span class="text-muted">Eiceblue</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/PDF/1.htm">PDF</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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/vscode/1.htm">vscode</a> <div>PDF作为广泛使用的文档格式,转换为轻量级标记语言Markdown后,可无缝集成到技术文档、博客平台和版本控制系统中,提高内容的可编辑性和可访问性。本文将详细介绍如何使用国产Spire.PDFforPython库将PDF文档转换为Markdown格式。技术优势:精准保留原始文档结构(段落/列表/表格)完整提取文本和图像内容无需Adobe依赖的纯Python实现支持Linux/Windows/mac</div> </li> <li><a href="/article/1950170537426743296.htm" title="在Windows11上安装Linux操作系统的几种技术方案" target="_blank">在Windows11上安装Linux操作系统的几种技术方案</a> <span class="text-muted">yuanpan</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/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>在Windows11上安装Linux主要有以下几种技术方案,每种方案适用于不同的需求场景:1.WindowsSubsystemforLinux(WSL)适用场景:开发、命令行工具、轻量级Linux环境支持发行版:Ubuntu、Debian、KaliLinux、Fedora等优点:轻量级:无需虚拟机,直接在Windows上运行Linux命令行环境。无缝集成:可访问Windows文件系统,支持VSCo</div> </li> <li><a href="/article/1950169523193704448.htm" title="Claude Code 超详细完整指南(2025最新版)" target="_blank">Claude Code 超详细完整指南(2025最新版)</a> <span class="text-muted">笙囧同学</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>终端AI编程助手|高频使用点+生态工具+完整命令参考+最新MCP配置目录快速开始(5分钟上手)详细安装指南系统要求Windows安装(WSL方案)macOS安装Linux安装安装验证配置与认证首次认证环境变量配置代理配置⚡基础命令详解启动命令会话管理文件操作Think模式完全指南MCP服务器配置详解MCP基础概念添加MCP服务器10个必备MCP服务器MCP故障排除记忆系统详解高级使用技巧成本控制策</div> </li> <li><a href="/article/1950166876634017792.htm" title="如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器" target="_blank">如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器</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%E5%8F%8A%E4%BD%BF%E7%94%A8/1.htm">运维及使用</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/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>Redis(RemoteDictionaryServer,远程字典服务器)是一种内存数据结构存储,通常用作NoSQL数据库、缓存和消息代理。它是开源的,因此用户可以免费安装,无需支付任何费用。Redis旨在为需要快速数据访问和低延迟的应用程序提供速度和效率。Redis支持多种数据类型,包括字符串(Strings)、列表(Lists)、集合(Sets)、哈希(Hashes)、有序集合(SortedS</div> </li> <li><a href="/article/1950163093577330688.htm" title="Linux中Samba服务器安装与配置文件" target="_blank">Linux中Samba服务器安装与配置文件</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/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>Samba简述27zkqsamba是一个基于TCP/IP协议的开源软件套件,可以在Linux、Windows、macOS等操作系统上运行。它允许不同操作系统的计算机之间实现文件和打印机共享。samba提供了一个服务,使得Windows操作系统可以像访问本地文件一样访问Linux、Mac等操作系统上的共享文件。实现跨平台的文件共享,提高办公环境的效率和便利性。samba也支持Windows网络邻居协</div> </li> <li><a href="/article/1950152629841620992.htm" title="ubuntu qt环境下出现No suitable kits found解决方案" target="_blank">ubuntu qt环境下出现No suitable kits found解决方案</a> <span class="text-muted"></span> <div>1.清理QtCreator缓存QtCreator会缓存项目配置、索引等数据,可能导致某些异常。清理方法:(1)删除QtCreator配置目录bashrm-rf~/.config/QtProject/(Ubuntu/Linux)或Windows:cmdrmdir/s/q"%APPDATA%\QtProject"(2)清除QtCreator的编译缓存bashrm-rf~/.cache/QtProjec</div> </li> <li><a href="/article/1950152503563710464.htm" title="如何在 Ubuntu 24.04 或 22.04 Linux 上安装和使用 NoMachine" target="_blank">如何在 Ubuntu 24.04 或 22.04 Linux 上安装和使用 NoMachine</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%E5%8F%8A%E4%BD%BF%E7%94%A8/1.htm">运维及使用</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/nomachine/1.htm">nomachine</a><a class="tag" taget="_blank" href="/search/%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A5/1.htm">远程连接</a> <div>NoMachine是一款适用于Linux(Ubuntu)及其他支持的操作系统的远程桌面应用程序,允许用户通过本地或远程系统从世界任何地方控制计算机。它可以在低带宽连接下工作,被专业人士和家庭用户广泛使用。NoMachine的主要功能高性能远程访问跨平台兼容性易于使用,因为用户界面友好提供强大的加密协议,如SSH、SSL及其他安全标准支持远程文件传输和打印服务允许从远程计算机进行音频和视频流媒体传输</div> </li> <li><a href="/article/1950135356531732480.htm" title="linux实战--日志管理" target="_blank">linux实战--日志管理</a> <span class="text-muted"></span> <div>简介日志文件重要的信息系统文件,及了许多重要的系统事件,包括用户的登录信息,系统的启动信息,系统的安全信息,邮寄相关信息,各种服务相关的信息。日志对安全也很重要。每天记录系统发生的各种事情,通过日志检查错误发生的原因或受到攻击时攻击者留下的痕迹。总的来说,日志是记录重大事件的文件。处理日志的工具rsyslog系统日志管理专职管理日志的工具,它产生各种信息文件,主要存放在/var/loglogrot</div> </li> <li><a href="/article/1950114557917720576.htm" title="Windows系统第一次运行C语言程序,环境配置,软件安装等遇到的坑及解决方法" target="_blank">Windows系统第一次运行C语言程序,环境配置,软件安装等遇到的坑及解决方法</a> <span class="text-muted">灬爱码士灬</span> <a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/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>明确需要编辑器和编译器,并选择自己要用什么(我选的编辑器是VSCode:VisualStudioCode;编译器是gcc)下载VSCode并配置环境变量(这里没啥问题),安装C/C++的拓展安装Cygwin,用来在Windows操作系统上模拟Unix/Linux环境(Cygwin官网:https://www.cygwin.com/。)安装过程中镜像可以选择https://mirrors.aliyu</div> </li> <li><a href="/article/1950110777142734848.htm" title="一篇教你学会Git" target="_blank">一篇教你学会Git</a> <span class="text-muted">编程界的彭于晏qaq</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/GIT/1.htm">GIT</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>从安装到高级使用(2025最新版)引言:为什么Git是开发者必备技能Git(GlobalInformationTracker)作为最流行的分布式版本控制系统,由Linux之父LinusTorvalds于2005年创建,现已成为软件开发的基础设施。与传统集中式版本控制系统(如SVN)相比,Git具有三大核心优势:分布式架构:每个开发者本地都有完整仓库副本,支持离线工作高效分支管理:创建和切换分支几乎</div> </li> <li><a href="/article/1950102202521546752.htm" title="基本服务 FTP & SMB" target="_blank">基本服务 FTP & SMB</a> <span class="text-muted">会飞的灰大狼</span> <a class="tag" taget="_blank" href="/search/Centos7/1.htm">Centos7</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>基本服务FTP&SMB前言:FTP简称为文件传输协议前面说的他可以做到备份的功能那么它可以做到文件传输的过程smb我们简单来说共享文件夹‍NFSNFS(NetworkFileSystem,网络文件系统)是一种分布式文件系统协议,允许不同计算机之间通过网络共享文件和目录,使远程文件系统像本地文件系统一样被访问。它最初由SunMicrosystems开发,现在已成为UNIX/Linux系统中常用的网络</div> </li> <li><a href="/article/1950099173521027072.htm" title="Ubuntu lamp" target="_blank">Ubuntu lamp</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/ubuntu/1.htm">ubuntu</a> <div>Ubuntulamp前言在Ubuntu安装lamp架构我们了解到lamp是完整的架构我们前面了解到了集合了Linux系统apacheMySQL和PHP语言的完整架构我们前面说了Centos7中编译安装lamp那么我们去说一下在Ubuntu中安装‍‍安装apache2‍apt直接安装apache2apt-yinstallapache2‍启动apache2systemctlstartapache2#测</div> </li> <li><a href="/article/1950088840886677504.htm" title="Linux文件权限与进程管理解析" target="_blank">Linux文件权限与进程管理解析</a> <span class="text-muted">雨季西柚</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>控制对文件的访问1。什么是文件系统权限?它是如何工作的?如何查看文件的权限?答:文件系统权限就是规定谁能对文件/文件夹做什么(比如看、改、删)的规则。简单说,就是分"所有者、所属组、其他人"三类,给每类分配"读、写、执行"三种权限。操作时系统先看你属于哪类,再查有没有对应权限,有就允许,没有就拦着。查看方式:Linux/mac:终端输ls-l文件名,看开头的rwxr--r--这类字符(3个一组,对</div> </li> <li><a href="/article/1950060480118714368.htm" title="【Linux内核模块】调试技巧" target="_blank">【Linux内核模块】调试技巧</a> <span class="text-muted">byte轻骑兵</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8FLinux%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/1.htm">嵌入式Linux驱动开发实战</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>内核模块开发最让人头疼的不是写代码,而是调试——代码编译通过了,加载后却要么没反应,要么直接让系统崩溃。这就像在黑屋子里修机器,看不见摸不着。其实内核调试有一套成熟的工具箱,掌握这些工具和技巧,就能给内核装个监控监控仪,让问题无所遁形。目录一、调试前的安全须知:别让系统崩溃二、最基础也最常用:printk打印日志2.1printk的基本用法2.2控制日志输出2.3printk的高级技巧三、内核Oo</div> </li> <li><a href="/article/1950059723604684800.htm" title="linux网卡显示未知未托管,linux有线网络显示设备未托管" target="_blank">linux网卡显示未知未托管,linux有线网络显示设备未托管</a> <span class="text-muted"></span> <div>NetworkManagerNetworkManager是为了使网络配置尽可能简单而开发的网络管理软件包,如果使用DHCP,NetworkManager会替换默认的路由表、从DHCP服务器获取IP地址并根据情况设置域名服务器,NetworkManager的目标是使网络能够开箱即用。NetworkManager由两部分组成:一个以超级用户运行的守护进程(network-manager);一个前端管理</div> </li> <li><a href="/article/1950057957823672320.htm" title="DNF 与 YUM 的区别详解:从 CentOS 7 到 CentOS 9 的演进" target="_blank">DNF 与 YUM 的区别详解:从 CentOS 7 到 CentOS 9 的演进</a> <span class="text-muted"></span> <div>DNF与YUM的区别详解:从CentOS7到CentOS9的演进标签:CentOS、YUM、DNF、Linux包管理、系统升级、兼容性适用版本:CentOS7、CentOS8、CentOS9一、背景介绍CentOS中使用的包管理工具是RedHat系列系统的重要组成部分。随着系统版本升级,包管理器从yum(CentOS7)逐渐过渡到dnf(CentOS8及之后版本)。二、YUM与DNF对比表对比项Y</div> </li> <li><a href="/article/1950053669370130432.htm" title="Python简单练习3" target="_blank">Python简单练习3</a> <span class="text-muted">第九条雀</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</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.技术面试题(1)解释Linux中的进程、线程和守护进程的概念,以及如何管理它们?答:1.进程:进程是程序的一次动态执行过程,是系统进行资源分配和调度的基本单位拥有独立的内存空间(代码段、数据段、堆栈等),进程间内存不共享包含进程PID、PPID、状态(运行、就绪、阻塞等)、优先级等属性进程间通信需通过管道、信号、共享内存等机制实现线程:线程是进程内的一个执行单元,是CPU调度的最小单位,共享所</div> </li> <li><a href="/article/1950036519733489664.htm" title="docker-基础入门" target="_blank">docker-基础入门</a> <span class="text-muted"></span> <div>docker入门dockers安装1.首先如果系统中已经存在旧的Docker,则先卸载:yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine\docker-selinux2.配置Dock</div> </li> <li><a href="/article/1950031354561359872.htm" title="Linux系统之lvremove 命令详解" target="_blank">Linux系统之lvremove 命令详解</a> <span class="text-muted">门前灯</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><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/lvremove/1.htm">lvremove</a> <div>lvremove命令详解一、命令概述lvremove是LVM(逻辑卷管理)工具集中用于删除逻辑卷(LV)的核心命令,可移除一个或多个逻辑卷,将其占用的逻辑扩展(LE)归还给卷组(VG),供其他逻辑卷复用。其核心功能是彻底删除逻辑卷及其关联数据,操作前需确保LV未被使用(如未挂载文件系统),且删除源LV会同时移除其所有依赖的快照卷。适用于清理废弃存储资源、释放卷组空间的场景。二、语法格式lvremo</div> </li> <li><a href="/article/1950027442433355776.htm" title="linux查看lvm命令,LVM管理常用命令参数详细解释" target="_blank">linux查看lvm命令,LVM管理常用命令参数详细解释</a> <span class="text-muted">南大鳥</span> <a class="tag" taget="_blank" href="/search/linux%E6%9F%A5%E7%9C%8Blvm%E5%91%BD%E4%BB%A4/1.htm">linux查看lvm命令</a> <div>物理卷管理pvchangepvchange命令允许管理员改变物理卷的分配许可。如果物理卷出现故障,可以使用pvchange命令禁止分配物理卷上的PE。语法pvchange(选项)(参数)选项-u:生成新的UUID;-x:是否允许分配PE。参数物理卷:指定要修改属性的物理卷所对应的设备文件。实例使用pvchange命令禁止分配指定物理卷上的PE。在命令行中输入下面的命令:pvchange-xn/de</div> </li> <li><a href="/article/1950027190192107520.htm" title="Linux从入门到精通——基础篇" target="_blank">Linux从入门到精通——基础篇</a> <span class="text-muted">weixin_30390075</span> <div>一.关于Linux的简介1.什么是Linux?Linux这个词指的是Linux内核,它是用来驱动电脑里的硬件的,而Linux操作系统指的是Linux内核和GUN组织(GUN的全称为GUNisnotUnix)所编写的软件,有了这个内核和相应的软件,由“死”的机械硬件组成的计算机才变成了“活”的,需要注意的是,单纯的软件并不能代表Linux系统。2.Linux的特点和优势1.模块化程度高Linux的内</div> </li> <li><a href="/article/1950025677407318016.htm" title="Linux DNS解析2 -- 网关DNS代理的作用" target="_blank">Linux DNS解析2 -- 网关DNS代理的作用</a> <span class="text-muted"></span> <div>当网关设备仅配置了/etc/hosts文件,而没有运行任何DNS代理服务(如Dnsmasq、Pi-hole或Unbound)时,终端设备将无法通过网关实现完整的DNS域名解析。具体分析如下:一、核心问题:网关没有DNS服务监听53端口DNS协议使用UDP/TCP53端口进行通信。终端设备将网关IP(如192.168.1.1)设为DNS服务器时,会向该IP的53端口发送DNS请求。如果网关未运行任何</div> </li> <li><a href="/article/1950025424415289344.htm" title="【WLAN】【调试】如何使用Wireshark分析加密的WiFi数据包" target="_blank">【WLAN】【调试】如何使用Wireshark分析加密的WiFi数据包</a> <span class="text-muted">花神庙码农</span> <a class="tag" taget="_blank" href="/search/wireshark/1.htm">wireshark</a><a class="tag" taget="_blank" href="/search/802.11/1.htm">802.11</a><a class="tag" taget="_blank" href="/search/WIFI/1.htm">WIFI</a><a class="tag" taget="_blank" href="/search/%E6%8A%A5%E6%96%87/1.htm">报文</a><a class="tag" taget="_blank" href="/search/%E8%A7%A3%E5%AF%86/1.htm">解密</a> <div>作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)博客主页:花神庙码农,地址:https://blog.csdn.net/qxhgd系列专栏:WLAN技术如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!!关注✨、点赞、收藏、评论。如需转载请参考转载须知!!如何使用Wireshark分析加密的WiFi数据包引言加密方式上的限制解密报文操作编辑</div> </li> <li><a href="/article/1950024037384122368.htm" title="ubuntu之坑(十四)——安装FFmpeg进行本地视频推流(在海思平台上运行)" target="_blank">ubuntu之坑(十四)——安装FFmpeg进行本地视频推流(在海思平台上运行)</a> <span class="text-muted">光电的一只菜鸡</span> <a class="tag" taget="_blank" href="/search/linux%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">linux虚拟机</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>1.编译x264(没有x264依赖项参考,有则跳过)  参考blog:ubuntu22.04下编译ffmpeg-6.0,并且激活x264编码功能。记录一下踩坑(ERROR:x264notfoundusingpkg-config)需要注意:sudo./configure--enable-static--prefix=/usr/local/x264  在执行上面命令时可能遇到下面问题,这是在Linux</div> </li> <li><a href="/article/1950024037837107200.htm" title="linux shell从入门到精通(一)——为什么要学习Linux Shell" target="_blank">linux shell从入门到精通(一)——为什么要学习Linux Shell</a> <span class="text-muted"></span> <div>1.编译型语言和解释型语言  计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。  翻译的方式有两种,一种是编译(compile),另一种是解释(interpret)。两种方式只是翻译的时间不同。编译型语言写在程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,例如:Windows系统中的EXE文件,编译好后运行</div> </li> <li><a href="/article/1950020633253441536.htm" title="Linux 逻辑卷管理实例详解" target="_blank">Linux 逻辑卷管理实例详解</a> <span class="text-muted">ORA_无花果</span> <a class="tag" taget="_blank" href="/search/os/1.htm">os</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E9%80%BB%E8%BE%91%E5%8D%B7%E7%AE%A1%E7%90%86/1.htm">逻辑卷管理</a><a class="tag" taget="_blank" href="/search/lvm%E5%AE%9E%E4%BE%8B%E8%AF%A6%E8%A7%A3/1.htm">lvm实例详解</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>Linux逻辑卷管理(LVM)LVM(LogicalVolumeManager,逻辑卷管理器)是一种把硬盘空间划分成“弹性”逻辑卷的方法。这里的“弹性”体现在硬盘不必重新分区也能够被简单地重新划分大小。需要强调说明的是,LVM是Linux操作系统中一个磁盘管理子系统,而不是文件系统!1、LVM基本概念一般来说,一个分区大小是固定的。如果一个分区上没有空间时,我们只能重新分区以扩大相应分区的大小(这</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>