2.1.4 Linux编程常用命令及工具(1)
1.expand
expand将输入制表符转换为空格。unexpand将输入空格转换为制表符。使用-t选项来指定制表符停止位,示例如下:
[root@localhost ~]# cat -A hello.c //使用cat -A显示文档所有字符信息 #include <stdio.h>$ int main(int argc,char* argv[])$ {$ ^Iprintf("hello.world1!\n");^I^I^I//test1$ //TAB制表符显示为^I ^Iprintf("hello.world2!\n");^I^I^I//test2$ }$ [root@localhost ~]# cat hello.c //cat查看,其中制表符为8个字符 #include <stdio.h> int main(int argc,char* argv[]) { printf("hello.world1!\n"); //打印信息hello.world1!,用于测试 printf("hello.world2!\n"); //test2 } [root@localhost ~]# expand -t 4 hello.c //设置制表符为4个字符 #include <stdio.h> int main(int argc,char* argv[]) { printf("hello.world1!\n"); printf("hello.world2!\n"); }
|
2.grep搜索字符串
grep用来在指定文件中搜索关键字符串,这在查找头文件函数声明时使用较多。其命令格式如下:
grep [选项] [查找内容] [查找范围]
- b:在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。
- c:只显示匹配行的数量。
- i:比较时不区分大小写。
- h:在查找多个文件时,指示grep不要将文件名加入到输出之前。
- l:显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。
- n:在输出前加上匹配串所在行的行号(文件首行行号为1)。
- v:只显示不包含匹配串的行。
- x:整行显示严格匹配的行。
例如在Linux头文件目录中查找fread函数声明位置,可以使用以下命令:
[root@localhost ~]# grep -b fread / usr/include/*.h //-b用来显示匹配位置 /usr/include/stdio_ext.h:1845:extern int __freading (FILE *__fp) __THROW; /usr/include/stdio_ext.h:2175:extern int __freadable (FILE *__fp) __THROW; /usr/include/stdio.h:20167:extern size_t fread (void *__restrict __ptr, size_t __size, /usr/include/stdio.h:21301:extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, |
3.find查找文件
find命令使用多种方式来查找某一文件的位置。其命令格式如下:
find 查找路径 [参数] [字符串对象]
(1)以名称和文件属性为条件查找。
其主要参数如下。
-name字符串:查找文件名匹配所给字符串的所有文件,字符串内可用通配符*、 及[ ]。
-lname 字符串:查找文件名匹配所给字符串的所有符号连接文件,字符串内可用通配符*、 及[ ]。
-gid n:查找ID号为n的用户组的所有文件。
-uid n:查找ID号为n的用户的所有文件。
-group 字符串:查找用户组名为所给字符串的所有文件。
-user 字符串:查找用户名为所给字符串的所有文件。
-empty:查找大小为0的目录或文件。
-path 字符串:查找路径名匹配所给字符串的所有文件,字符串内可用通配符*、 及[ ]。
-perm 权限:查找具有指定权限的文件和目录,权限的表示如711、644。
-size n[bckw]:查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。
-type x:找类型为x的文件,x为b(块设备文件)、c(字符设备文件)、d(目录文件)、p(命名管道(FIFO))、f(普通文件)、l(符号连接文件)或s(socket文件)。
例如,在/usr/include文件夹下查找文件名为stdio.h的文件,其命令如下:
[root@localhost ~]# find /usr/include/ -name stdio.h //在目录/usr/include中查找文件stdio.h /usr/include/stdio.h /usr/include/bits/stdio.h
|
(2)以时间为条件查找。其主要参数如下:
- amin n:查找n分钟以前被访问过的所有文件。
- atime n:查找n天以前被访问过的所有文件。
- cmin n:查找n分钟以前文件状态被修改过的所有文件。
- ctime n:查找n天以前文件状态被修改过的所有文件。
- mmin n:查找n分钟以前文件内容被修改过的所有文件。
- mtime n:查找n天以前文件内容被修改过的所有文件。
(3)可执行的操作。
- exec 命令名称{ }:对符合条件的文件执行所给的Linux命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以"\\;"结束。
-ok 命令名称{ }:对符合条件的文件执行所给的Linux命令,与exec不同的是,它会询问用户是否需要执行该命令。
4.AWK工具
AWK是一种用于处理文本的编程语言工具。AWK在很多方面类似于shell编程语言,尽管AWK具有完全属于其本身的语法。最初创造AWK时,目的是用于处理文本,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具依次扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。其命令语法结构如下:
awk '{pattern + action}' {filenames} |
其中pattern表示AWK在文件中查找的内容,而action是在找到匹配内容时所执行的一系列命令。
AWK将每个输入行信息分为记录和字段。
记录是单行的输入,记录的分隔符是换行,每条记录包含若干字段。
默认的字段分隔符是空格或制表符。
当AWK读取输入内容时,整条记录被分配给变量$0。各字段以字段分隔符分开,被分配给变量$1、$2、$3,序号依次增加。
例如以下命令:
[root@localhost ~]# cat hello.c //hello.c文件内容 #include <stdio.h> //<stdio.h>前有空格 int main(int argc,char* argv[]) //main前面有空格 { printf("hello.world1!\n"); //注释前面有制表位 printf("hello.world2!\n"); //注释前面有制表位 } [root@localhost ~]# awk '{print $1}' hello.c //打印所有行的第一个字段 #include int { printf("hello.world1!\n"); printf("hello.world2!\n"); }
|
AWK主要用于表格信息处理,关于AWK更多操作请参阅AWK手册。
【责任编辑:云霞 TEL:(010)68476606】