touch
用来生成空白文件或是修改已有文件的时间戳,-d用于指定特定的时间和日期。
[root@localhost test]# touch hello.txt
[root@localhost test]# ls
hello.txt
[root@localhost test]# touch -d "Fri Jun 25 20:50:14 IST 2018" TEST.TXT
ln
为某个文件或者目录在另一个位置创建一个同步的链接。链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。给ln命令加上- s选项,则建立符号链接。
ln -s target symbolic_link_name
[root@localhost test]# ln -s /var/www/ ~/web
lrwxrwxrwx. 1 root root 8 10月 20 21:16 web -> /var/www
注:使用dd命令创建iso文件
dd if=/dev/cdrom of=image.iso
diff
实现文件的查找并修补文件的差异。diff -u 是一体化输出,其中+起始的是新加入的行,-起始的是被删除的行。
[root@localhost test]# cat i.txt
this is a test text
1
2
3
[root@localhost test]# cat I.txt
this is a test txt
2
3
4
[root@localhost test]# diff -u i.txt I.txt
--- i.txt 2018-12-11 21:02:52.307280907 +0800
+++ I.txt 2018-12-11 21:03:12.503434416 +0800
@@ -1,5 +1,5 @@
-this is a test text
-1
+this is a test txt
2
3
+4
patch
使用patch命令来进行修补。
[root@localhost test]# diff -u i.txt I.txt > i.patch
[root@localhost test]# patch -p1 i.txt < i.patch
patching file i.txt
[root@localhost test]# cat i.txt
this is a test txt
2
3
4
[root@localhost test]#
head
查看文章的一小部分内容,也有可能是文件的前n行或后n行
[root@localhost test]# head -n 2 i.txt
this is a test txt
2
打印除了最后M行之外的所有行
[root@localhost test]# head -n -3 i.txt
this is a test txt
2
tail
打印文件的后面指定的行数;同时tail命令常用的是见识一个内容不断增加的文件中出现的新行,为了能够监视文件的增长,tail有一个特殊的选项-f或--follow,允许tail关注文件内容的更新并将其显示出来。也可以指定特定进程,来决定tail命令的终止。
[root@localhost test]# tail -f /var/log/messages
Dec 11 21:26:12 localhost NetworkManager[670]: <info> [1544534772.0154] dhcp4 (ens33): nameserver '192.168.192.2'
Dec 11 21:26:12 localhost NetworkManager[670]: <info> [1544534772.0155] dhcp4 (ens33): domain name 'localdomain'
wc
用于统计文件的行数,单词数,字符数。
[root@localhost test]# wc i.txt
5 8 26 i.txt
[root@localhost test]# wc -w i.txt
8 i.txt
[root@localhost test]# wc -c i.txt
26 i.txt
grep
正则表达式是用来进行模式匹配处理文本的。正则表达式有3种,位置标记,标识符,数量修饰符。
位置标记:
^ 指定匹配正则表达式的文本必须起始于字符串的首部
$指定匹配正则表达式的文本必须结束语字符串的尾部
标识符:
A字符:匹配特定的字符
.:匹配任意一个字符
[]:匹配括号内的任意一个字符
[^]:匹配不在括号内的任意一个字符
数量修饰符:
?:匹配之前的项1次或0次
+:匹配之前的项一次或多次
*:匹配之前的项0次或多次
{n}:匹配之前的项n次
{n,}:匹配之前的项至少n次
{n,m}:匹配之前的项最小n次,最大m次
在文本中搜索特定模式的文本行
[root@localhost test]# grep a i.txt
this is a test txt
grep命令默认使用基础正则表达式,选项-E,可以使grep使用扩展正则表达式,也可以使用egrep命令:
[root@localhost test]# grep -E "[a-z0-9]+@[a-z0-9]+\.[a-z]+" i.txt
123456@qq.com
-o 可以只输出匹配到的文本,-v可以打印出不匹配match_pattern的所有行,-c能够统计出匹配模式的文本行数,-n可以打印匹配字符串所在的行数
递归搜索多个文件
[root@localhost ~]# grep "text" . -R -n
./web/out.html:4: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
./web/out.html:8: <style type="text/css">
-i选项可以匹配模式时,不考虑字符的大小写,-e可以指定多个匹配模式,-f可以读取文件并使用其中的模式。
[root@localhost ~]# grep i.txt -R -n -i
.bash_history:939:vim i.txt
.bash_history:940:vim I.txt
.bash_history:942:diff i.txt I.txt
cut
使用cut按列切分文件,能够提取指定位置或列之间的字符,可以指定每列的分隔符,在cut中,没列被称为一个字段。默认制表符是字段的分隔符,对于没有分隔符的行,会将该行按照原样打印出来,使用-s选项可以禁止打印出这些行。
[root@localhost test]# cut -s -f 1,2 a.txt
1 2
4 5
7 8
默认制表符是分隔符,当然也可以使用-d设置分隔符,
[root@localhost test]# cut -f 2,3 -d "," A.txt
2,3
5,6
8,9
如果没法根据字段的位置来提取值,则可以根据字符位置提取,cut命令可以根据字节或者字符来指定选择范围,也可以将字段指定为某个范围内的字节,字符,字段: -b字节,-c字符,-f定义字段
[root@localhost test]# cut -c 1-3 a.txt
1 2
4 5
7 8
sed
sed是流编辑器的缩写,常用用法是进行文本替换,sed可以使用另一个字符串来替换匹配模式,模式可以是简单的字符串或正则表达式。
sed 's/pattern/replace_string/' file
[root@localhost test]# sed 's/,/./' A.txt
1.2,3
4.5,6
7.8,9
注意:替换只是替换了每行中模式首次匹配的内容,如果想进行全局替换,则可以使用/g,也可以使用/#g标记可以使sed替换第N次出现的匹配。
[root@localhost test]# sed 's/,/./g' A.txt
1.2.3
4.5.6
7.8.9
sed命令会将s之后的字符视为命令分隔符
[root@localhost test]# sed 's,[0-9],a,g' A.txt
a,a,a
a,a,a
a,a,a
直接删除空行,/d告诉sed不进行替换工作,而是直接删除匹配的空行。
[root@localhost test]# cat a.txt
1 2 3
4 5 6
7 8 9
[root@localhost test]# sed '/^$/d' a.txt
1 2 3
4 5 6
7 8 9
如果将文件名传递为sed,它会将文件内容输出到stdout,但是文件内容没有变化,我们如果想直接在文件中进行替换,则可以使用-i选项
[root@localhost test]# sed '/^$/d' -i a.txt
[root@localhost test]# cat a.txt
1 2 3
4 5 6
7 8 9
也可以使用-e来组合来组合多个模式,也可以使用管道
awk
awk命令可以处理数据流,支持关联数组,递归函数,条件语句。awk的脚本结构如下:
awk "BEGIN{ print "start" } pattern {commands} END {print "end"}' file
awk脚本通常由3部分组成:BEGIN,END和带模式匹配选项的公共语句块,这三个部分都是可选的,可以不用出现在脚本中。
[root@localhost test]# awk "BEGIN {i=0} {i++} END {print i}" i.txt
5
awk的工作方式:
⑴首先执行BEGIN{command}语句块中的语句,这里的语句可以是变量初始化,打印输出,这是一个可选的语句块;
⑵接着从文件或stdin中读取一行,如果能够匹配pattern,则执行随后的command语句块,重复这个过程,直至文件全部被读取完毕,这个语句同样也是可选的,如果不提供,则默认执行{print},即打印所读取到的每一行
⑶读读取至输入流末尾时,执行END{command}语句块,这个也是可选的。
注意,如果没有提供模式,则awk就认为所有的行都是匹配的。
[root@localhost test]# echo -e "liu\nddddd" | awk 'BEGIN {print "START"} {print} END {print "END"}'
START
liu
ddddd
END
awk命令是一个解释器,它能够解释并执行程序,和shell一样,它包括一些特殊变量
......
内容参考《Linux Shell脚本攻略》