个人笔记,有些是转载,有些是摘要,有些事自己整理,有些事自己测验,如有侵权,请指出。
1.将1(标准输出)2(标准出错)的信息不显示出来.
1>/dev/null
表示将命令的标准输出重定向到 /dev/null
2>/dev/null
表示将命令的错误输出重定向到 /dev/null
2>/dev/null &
&表示后台执行,你可以继续占有你的输入窗口
也就是将1(标准输出)2(标准出错)的信息不显示出来.
参考链接:http://bbs.csdn.net/topics/10438612
2. egrep
输出匹配某种模式的行
语法: egrep[必要参数][选择性参数][文件]
功能说明:使用方法和效果同“grep-e”, egrep相当于grep功能的扩展。
例: find * | grep “A” #该命令的意思是搜索当前目录下的所有档案名,并列出含字母A的。
但是grep一次只能搜索一个字母。如果加上-e或者用egrep
find * | grep -e “A|B”
或者: find * | egrep “A|B”
则表示搜索当前目录下的所有档案名,并列出含字母A或字母B的。
参考书籍:《Linux指令速查手册》
3. sed 命令解析(转载文档似乎台湾地区的,有些地方实在不知道怎么翻译,请谅解)
设计script的时候,有时候需要修改档案,例如:删除或者置换某些关键字。
像这种在script执行过程,动态修改档案的作法,成为串流编辑。
具有串流编辑能力的工具,成为串流编辑器(stream editor)。
sed是这方面的佼佼者,可以补充bash的不足。
而script执行时可能要制作报表,呈现各栏位资讯。
传统上,能和bash完美搭配的飞awk莫属。
1. 正则表达式
正则表达式是一种描述的方法,小型的语言,或若干种样式的组合。
以下介绍正则表达式的语法:
. 一点代表一个字元
. 代表任意字元
例1: .T. 代表三个字元,中间是T,左右两边是任意的一个字元
例2:...
代表字元长度是 3的字串。若想比對 . 这个元本身,需加上跳脱字元(\),写成\.。
例如:样式 data\....代表data.后接三個字元,如 data.txt、data.cfg、data.123等等,
都符合這個樣式,但 data1234就不符合了,因為四個點最左邊的那個點,已經用
\跳脫其特殊意義,還原為 . 這個字元本身,因此,\....和 1234比對不符
^ 代表位置在行的开头
例: ^Jack,代表Jack应该出现在行首,像 Jack and Marry 123就符合此一样式,
但 Hi Jack就不符合。
$ 在尾部
代表在行的尾部。理同^。
[...]字元集合
代表字元串列中的一个字元。
例1:[ABc], 代表A或B或c这三个字元中的一个。
例2:[Ss]ame代表 Same或same
例3:[A-Z]:一个大写字母
例4:[^A-Z]:除了大写字母之外的一个字元
^在这里表示非得意思。
*出现0个以上
* 代表前面的(左)字元有0个或者0个以上
例如:aA*c,代表A这个字元可能出现0个或者0个以上。如aAAAc。
\{...\} 制定符合的个数
指定前面的字元的个数:如[a-z]\{3,5\}代表以小写字母组成的字串,长度是3~5
\(...\)把比对符合的字符串暂时保存起来
例如:H\(...\)\y 表示要报春H和y之间的三个字元。
若欲取用保存的字串,可用位置参数,\1 代表第一个保存的字串,\2 代表第二个,其他依此类推。
2. Sed用法:非交谈式的串流编辑器,可以动态编辑档案。
非交谈:不和使用者互动。
处理的对象:档案的资料流
工作模式:比对每一笔资料行,若符合样式,就执行指定的动作。
语法:
sed ‘样式命令’ 档案
这里的样式使用一堆//, 表示寻找的意思,也可以指定资料行范围,例如1,6 表示第一行到第六行
/AAA/,/DDD/表示作用范围从含有AAA的資料列,到含有 DDD的資料列。
選項與參數:
-n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN
的資料一般都會被列出到螢幕上。但如果加上 -n 參數後,則只有經過
sed 特殊處理的那一行(或者動作)才會被列出來。
-e :直接在指令列模式上進行 sed 的動作編輯;
-f :直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的
sed 動作;
-r :sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
-i :直接修改讀取的檔案內容,而不是由螢幕輸出。
動作說明: [n1[,n2]]function
n1, n2 :不見得會存在,一般代表『選擇進行動作的行數』,舉例來說,如果我的動作
是需要在 10 到 20 行之間進行的,則『 10,20[動作行為] 』
function 有底下這些咚咚:
a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
d :刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚;
i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,亦即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作~
s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配
正規表示法!例如 1,20s/old/new/g 就是啦!
例:
[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
转载文档:http://www.delightpress.com.tw/bookRead/skns00004_read.pdf
4.字符转换,主要用于删除文件中的控制字符:tr
1.语法:
tr [-c/d/s/t] [SET1] [SET2]
SET1: 字符集1
SET2: 字符集2
-c:complement,用SET2替换SET1中没有包含的字符
-d:delete,删除SET1中所有的字符,不转换
-s: squeeze-repeats,压缩SET1中重复的字符
-t: truncate-set1,将SET1用SET2转换,一般缺省为-t
2、去除重复的字符
#将连续的几个相同字符压缩为一个字符
$ echo aaacccddd | tr -s [a-z]
acd
$ echo aaacccddd | tr -s [abc]
acddd
3、删除空白行
#删除空白行就是删除换行符/n
#注意:这些空白行上只有回车符,没有空格符
$ cat test.txt
I love linux!
Hello World!
Shell is worthy to been studied
#这里用换行符的转义字符\n
#注意:此处用-s删除了多余的换行符,如-d,则是删除所有的换行符
$ cat test.txt | tr -s ["\n"]
I love linux!
Hello World!
Shell is worthy to been studied
#也可以用八进制符\012,\012与\n都是换行符
$ cat test.txt | tr -s "[\012]"
I love linux!
Hello World!
Shell is worthy to been studied
3、大小写相互转换
#将语句中所有的小写字母变成大写字母,其中-t可省略
$ echo "Hello World I Love You" |tr [-t] [a-z][A-Z]
HELLO WORLD I LOVE YOU
#将语句中所有的大写字母变成小写字母
$ echo "Hello World I Love You" |tr [A-Z] [a-z]
hello world i love you
#也可以利用字符类进行转换
#[:lower:]代表小写字母,[:upper:]代表大写字母
$ echo "Hello World I Love You" |tr [:lower:][:upper:]
HELLO WORLD I LOVE YOU
4、删除指定的字符
$ cat test.txt
Monday 09:00
Tuesday 09:10
Wednesday 10:11
Thursday 11:30
Friday 08:00
Saturday 07:40
Sunday 10:00
#现在要删除处理星期之外的所有字符
#-d代表删除,[0-9]代表所有的数字,[: ]代表冒号和空格
$ cat test.txt | tr -d "[0-9][: ]"
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
5、利用-c进行补集的替换
#有时候在文本中我们只知道要保留的一些字符,其他字符种类繁多,就可以使用补集的替换
$ cat test.txt
Monday 09:00
Tuesday 09:10
Wednesday 10:11
Thursday 11:30
Friday 08:00
Saturday 07:40
Sunday 10:00
#我们只需要星期,则思路就是除了字母,其他统统替换掉
#这里,-c:用换行符替换掉除了字母外的所有字符;-s:删除多余的换行符
cat test.txt|tr -cs "[a-z][A-Z]" "\n"
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
此项为转载:http://blog.csdn.net/zhuying_linux/article/details/6825568
5. xargs用法整理
管道+xargs用于把上游输出转换为下游参数输入。例如 ls *.bak | xargs rm -f
的意思是强制删除该目录下面所有的 .bak结尾的文件。
参考目录:http://www.bfcat.com/index.php/2012/07/find-xargs/