文件操作命令

本文详细介绍了多种Linux文件操作命令,包括创建、删除、拷贝、移动文件或目录的命令,如touch、rmdir、cp等;改变文件权限的chmod命令;分页显示文件内容的more、less命令;查看文件首尾内容的tail、head命令;还有vi/vim编辑器,以及awk、sed等数据处理命令,还涉及压缩、比较、排序等命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件操作命令
(1)touch:创建一个文件 touch file
创建多个文件 touch file1 file2 file3
(2)mkdir:删除空的目录
将工作目录下,名为 AAA 的子目录删除 :rmdir AAA
在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后, BBB 目录成为空目录,则 BBB 亦予删除:rmdir -p BBB/Test
(3)rmdir:删除一个文件或者目录
rm file 删除文件
rm dir -r 递归删除目录
(4)cp:拷贝文件或者目录
cp src_dir dst_dir ->把原来的目录拷贝一份
eg: cp …/dir/file dir/ 将上一级目录下的dir/file拷贝di下
cp src_dir dst_dir -a ->把原来的目录拷贝一份(所有)
(5)rm:删除一个文件或者目录
rm file 删除文件
rm dir -r 递归删除目录
(6)mv:移动或者重命名
mv src_file / src_dir dst_file / dst_dir -> 移动(源和目的都存在)或者 重命名(目的不存在)
(7)chmod:改变linux系统文件或目录的访问权限
1. 命令格式:chmod [-cfvR] [–help] [–version] mode file
2. 命令功能:用于改变文件或目录的访问权限,用它控制文件或目录的访问权限。
3. 命令参数:
必要参数:
-c 当发生改变时,报告处理信息
-f 错误信息不输出
-R 处理指定目录以及其子目录下的所有文件
-v 运行时显示详细处理信息
选择参数:
–reference=<目录或者文件> 设置成具有指定目录或者文件具有相同的权限
–version 显示版本信息
<权限范围>+<权限设置> 使权限范围内的目录或者文件具有指定的权限
<权限范围>-<权限设置> 删除权限范围的目录或者文件的指定权限
<权限范围>=<权限设置> 设置权限范围内的目录或者文件的权限为指定的值
权限范围:
u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组
权限代号:
r :读权限,用数字4表示
w :写权限,用数字2表示
x :执行权限,用数字1表示

  • :删除权限,用数字0表示
    s :特殊权限
    该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
      1). 文字设定法:
       chmod [who] [+ | - | =] [mode] 文件名
      2). 数字设定法
      我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
      例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
      数字设定法的一般形式为:
       chmod [mode] 文件名
    (8)more:一页一页的显示
    1.命令格式:more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file … ]
    2.命令功能:more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。
    3.命令参数:
    +n 从笫n行开始显示
    -n 定义屏幕大小为n行
    +/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
    -c 从顶部清屏,然后显示
    -d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
    -l 忽略Ctrl+l(换页)字符
    -p 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
    -s 把连续的多个空行显示为一行
    -u 把文件内容中的下画线去掉
    4.常用操作命令:
    Enter 向下n行,需要定义。默认为1行
    Ctrl+F 向下滚动一屏
    空格键 向下滚动一屏
    Ctrl+B 返回上一屏
    = 输出当前行的行号
    :f 输出文件名和当前行的行号
    V 调用vi编辑器
    !命令 调用Shell,并执行命令
    q 退出more
    5.命令实例:
    实例1:显示文件中从第3行起的内容
    命令:more +3 log2012.log
    实例2:从文件中查找第一个出现"day3"字符串的行,并从该处前两行开始显示输出
    命令:more +/day3 log2012.log
    实例3:设定每屏显示行数命令:more -5 log2012.log
    实例4:列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来 命令:ls -l | more -5
    (9)less:对文件或其它输出进行分页显示
    1.命令格式:less [参数] 文件
    2.命令功能:
    less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
    3.命令参数:
    -b <缓冲区大小> 设置缓冲区的大小
    -e 当文件显示结束后,自动离开
    -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
    -g 只标志最后搜索的关键词
    -i 忽略搜索时的大小写
    -m 显示类似more命令的百分比
    -N 显示每行的行号
    -o <文件名> 将less 输出的内容在指定文件中保存起来
    -Q 不使用警告音
    -s 显示连续空行为一行
    -S 行过长时间将超出部分舍弃
    -x <数字> 将“tab”键显示为规定的数字空格
    /字符串:向下搜索“字符串”的功能
    ?字符串:向上搜索“字符串”的功能
    n:重复前一个搜索(与 / 或 ? 有关)
    N:反向重复前一个搜索(与 / 或 ? 有关)
    b 向后翻一页
    d 向后翻半页
    h 显示帮助界面
    Q 退出less 命令
    u 向前滚动半页
    y 向前滚动一行
    空格键 滚动一行
    回车键 滚动一页
    [pagedown]: 向下翻动一页
    [pageup]: 向上翻动一页
    4.使用实例:
    实例1:ps查看进程信息并通过less分页显示同时显示行号
    命令:aijian.shi@U-aijian-shi:~/ALM$ ps -ef|less -N
    实例2.浏览多个文件
    命令:aijian.shi@U-aijian-shi:~/ALM$ less test2.log test.log
    说明:
    输入 :n后,切换到 test.log
    输入 :p 后,切换到test2.log
    ps:当正在浏览一个文件时,也可以使用 :e命令 打开另一个文件。
    命令:less file1 :e file2
    5.附加备注
    1.全屏导航
    ctrl + F - 向前移动一屏
    ctrl + B - 向后移动一屏
    ctrl + D - 向前移动半屏
    ctrl + U - 向后移动半屏
    2.单行导航
    j - 向前移动一行
    k - 向后移动一行
    3.其它导航
    G - 移动到最后一行
    g - 移动到第一行
    q / ZZ - 退出 less 命令
    4.其它有用的命令
    v - 使用配置的编辑器编辑当前文件
    h - 显示 less 的帮助文档
    &pattern - 仅显示匹配模式的行,而不是整个文件
    5.标记导航
    当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
    ma - 使用 a 标记文本的当前位置
    'a - 导航到标记 a 处
    6.查找
    more, less 都具备查找功能,按/ 然后输入要找的字串,再按 Enter 即可,按 n(next) 会继续找,大写的 N 则是往回(上)找,按 q(quit)或者ZZ离开
    (10)tail:显示文件末尾部分的内容,默认显示后10行
    (11)head:显示文件开头部分的内容, 默认显示前10行
    (12)cat:主要有三大功能:
    1.一次显示整个文件。$ cat filename
    2.从键盘创建一个文件。$ cat > filename
    只能创建新文件,不能编辑已有文件.
    3.将几个文件合并为一个文件: $cat file1 file2 > file
    参数:
    -n 或 --number 由 1 开始对所有输出的行数编号
    -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
    -s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
    -v 或 --show-nonprinting
    例:
    把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
    cat -n textfile1 > textfile2
    把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
    cat -b textfile1 textfile2 >> textfile3
    把test.txt文件扔进垃圾箱,赋空值test.txt
    cat /dev/null > /etc/test.txt
    (13)vi/vim:文档创建和编辑
  1. 命令行模式command mode)
    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。
  2. 插入模式(Insert mode)
    只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
  3. 底行模式(last line mode)
    将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
    2、vi的基本操作
    a) 进入vi
    在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:$ vi myfile。不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。
    b) 切换至插入模式(Insert mode)编辑文件
    在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。
    c) Insert 的切换
    您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。
    d) 退出vi及保存文件
    在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:
    : w filename (输入 「w filename」将文章以指定的文件名filename保存)
    : wq (输入「wq」,存盘并退出vi)
    : q! (输入q!, 不存盘强制退出vi)
    3、命令行模式(command mode)功能键
    1). 插入模式
    按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
    按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
    按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
    2). 从插入模式切换为命令行模式
    按「ESC」键。
    3). 移动光标
    vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
    按「ctrl」+「b」:屏幕往“后”移动一页。
    按「ctrl」+「f」:屏幕往“前”移动一页。
    按「ctrl」+「u」:屏幕往“后”移动半页。
    按「ctrl」+「d」:屏幕往“前”移动半页。
    按数字「0」:移到文章的开头。
    按「G」:移动到文章的最后。
    按「$」:移动到光标所在行的“行尾”。
    按「^」:移动到光标所在行的“行首”
    按「w」:光标跳到下个字的开头
    按「e」:光标跳到下个字的字尾
    按「b」:光标回到上个字的开头
    按「#l」:光标移到该行的第#个位置,如:5l,56l。
    4). 删除文字
    「x」:每按一次,删除光标所在位置的“后面”一个字符。
    「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符。
    「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。
    「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。
    「dd」:删除光标所在行。
    「#dd」:从光标所在行开始删除#行
    5). 复制
    「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
    「#yw」:复制#个字到缓冲区
    「yy」:复制光标所在行到缓冲区。
    「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
    「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
    6). 替换
    「r」:替换光标所在处的字符。
    「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
    7). 回复上一次操作
    「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
    8). 更改
    「cw」:更改光标所在处的字到字尾处
    「c#w」:例如,「c3w」表示更改3个字
    9). 跳至指定的行
    「ctrl」+「g」列出光标所在行的行号。
    「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
    (14)find:
    2-- 知道文件名字,找路径(按名称查找文件路径)
    格式:find [路径] [选项] [描述]
    find ./* -name 文件名 eg:find ./* -name copy.c
    eg:find . -type d/f -name filename
    find . -type d/f -mtime -10 //最后更改时间 十天内
    (15)grep:
    1-- 知道内容,找文件(按字符串查找文件路径)
    格式:grep [选项] “描述” [路径]
    grep “关键词” ./* -R <==> grep “内容” 路径 递归 (./ 为当前路径 * 所有文件)
    eg:grep “main” ./* -R
    (16)wc:用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。
    语法
    wc(选项)(参数)
    选项
    -c或–bytes或——chars:只显示Bytes数;
    -l或——lines:只显示列数;
    -w或——words:只显示字数。
    参数
    文件:需要统计的文件列表。
    测试文件的行数、字符数、字节数
    wc -l file.txt测试行数
    wc -w file.txt 测试单词的个数
    wc -m file.txt 测试的是字符数
    (17)awk:
    awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
    awk处理过程: 依次对每一行进行处理,然后输出
    awk命令形式:
    awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
    [-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
    ’ ’ 引用代码块
    BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
    // 匹配代码块,可以是字符串或正则表达式
    {} 命令代码块,包含一条或多条命令
    ; 多条命令使用分号分隔
    END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

特殊要点:
$0 表示整个当前行
$1 每行第一个字段
NF 字段数量变量
NR 每行的记录号,多文件记录递增
FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始
\t 制表符
\n 换行符
FS BEGIN时定义分隔符
RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~ 匹配,与==相比不是精确比较
!~ 不匹配,不精确比较
== 等于,必须全部相等,精确比较
!= 不等于,精确比较
&&  逻辑与
|| 逻辑或

  •        匹配时表示1个或1个以上
    

/[0-9][0-9]+/ 两个或两个以上数字
/[0-9][0-9]*/ 一个或一个以上数字
FILENAME 文件名
OFS 输出字段分隔符, 默认也是空格,可以改为制表符等
ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F’[:#/]’ 定义三个分隔符

print & $0
print 是awk打印指定内容的主要命令
awk ‘{print}’ /etc/passwd == awk ‘{print $0}’ /etc/passwd
awk ‘{print " "}’ /etc/passwd //不输出passwd的内容,而是输出相同个数的空行,进一步解释了awk是一行一行处理文本
awk ‘{print “a”}’ /etc/passwd //输出相同个数的a行,一行只有一个a字母
awk -F":" ‘{print $1}’ /etc/passwd
awk -F: ‘{print $1; print $2}’ /etc/passwd //将每一行的前二个字段,分行输出,进一步理解一行一行处理文本
awk -F: ‘{print $1,$3,$6}’ OFS="\t" /etc/passwd //输出字段1,3,6,以制表符作为分隔符

-f指定脚本文件
awk -f script.awk file
BEGIN{
FS=":"
}
{print $1} //效果与awk -F":" '{print $1}'相同,只是分隔符使用FS在代码自身中指定

awk ‘BEGIN{X=0} /^$/{ X+=1 } END{print “I find”,X,“blank lines.”}’ test
I find 4 blank lines.
ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size is”,sum}’ //计算文件大小
total size is 17487

-F指定分隔符
$1 指指定分隔符后,第一个字段,$3第三个字段, \t是制表符
一个或多个连续的空格或制表符看做一个定界符,即多个空格看做一个空格
awk -F":" ‘{print $1}’ /etc/passwd
awk -F":" ‘{print $1 $3}’ /etc/passwd //$1与$3相连输出,不分隔
awk -F":" ‘{print $1,$3}’ /etc/passwd //多了一个逗号,$1与$3使用空格分隔
awk -F":" ‘{print $1 " " $3}’ /etc/passwd //$1与$3之间手动添加空格分隔
awk -F":" ‘{print “Username:” $1 “\t\t Uid:” $3 }’ /etc/passwd //自定义输出
awk -F: ‘{print NF}’ /etc/passwd //显示每行有多少字段
awk -F: ‘{print $NF}’ /etc/passwd //将每行第NF个字段的值打印出来
awk -F: ‘NF4 {print }’ /etc/passwd //显示只有4个字段的行
awk -F: ‘NF>2{print $0}’ /etc/passwd //显示每行字段数量大于2的行
awk ‘{print NR,KaTeX parse error: Expected 'EOF', got '}' at position 2: 0}̲' /etc/passwd …NF,"\t",$0}’ /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容
awk -F: 'NR
5{print}’ /etc/passwd //显示第5行
awk -F: ‘NR5 || NR6{print}’ /etc/passwd //显示第5行和第6行
route -n|awk ‘NR!=1{print}’ //不显示第一行

//匹配代码块
//纯字符匹配 !//纯字符不匹配 ~//字段值匹配 !~//字段值不匹配 ~/a1|a2/字段值匹配a1或a2
awk ‘/mysql/’ /etc/passwd
awk ‘/mysql/{print }’ /etc/passwd
awk ‘/mysql/{print $0}’ /etc/passwd //三条指令结果一样
awk ‘!/mysql/{print $0}’ /etc/passwd //输出不匹配mysql的行
awk ‘/mysql|mail/{print}’ /etc/passwd
awk ‘!/mysql|mail/{print}’ /etc/passwd
awk -F: ‘/mail/,/mysql/{print}’ /etc/passwd //区间匹配
awk ‘/[2][7][7]*/{print $0}’ /etc/passwd //匹配包含27为数字开头的行,如27,277,2777…
awk -F: ‘$1~/mail/{print $1}’ /etc/passwd //$1匹配指定内容才显示
awk -F: ‘{if($1~/mail/) print $1}’ /etc/passwd //与上面相同
awk -F: ‘$1!~/mail/{print $1}’ /etc/passwd //不匹配
awk -F: ‘$1!~/mail|mysql/{print $1}’ /etc/passwd

IF语句
必须用在{}中,且比较内容用()扩起来
awk -F: ‘{if($1~/mail/) print $1}’ /etc/passwd //简写
awk -F: ‘{if($1~/mail/) {print $1}}’ /etc/passwd //全写
awk -F: ‘{if($1~/mail/) {print $1} else {print $2}}’ /etc/passwd //if…else…

条件表达式
== != > >=
awk -F":" ‘$1==“mysql”{print $3}’ /etc/passwd
awk -F":" ‘{if($1==“mysql”) print $3}’ /etc/passwd //与上面相同
awk -F":" ‘$1!=“mysql”{print $3}’ /etc/passwd //不等于
awk -F":" ‘$3>1000{print $3}’ /etc/passwd //大于
awk -F":" ‘$3>=100{print $3}’ /etc/passwd //大于等于
awk -F":" ‘$3<1{print $3}’ /etc/passwd //小于
awk -F":" ‘$3<=1{print $3}’ /etc/passwd //小于等于

逻辑运算符
&& ||
awk -F: ‘$1~/mail/ && $3>8 {print }’ /etc/passwd //逻辑与,$1匹配mail,并且$3>8
awk -F: ‘{if($1~/mail/ && $3>8) print }’ /etc/passwd
awk -F: ‘$1~/mail/ || $3>1000 {print }’ /etc/passwd //逻辑或
awk -F: ‘{if($1~/mail/ || $3>1000) print }’ /etc/passwd

数值运算
awk -F: ‘$3 > 100’ /etc/passwd
awk -F: ‘$3 > 100 || $3 < 5’ /etc/passwd
awk -F: ‘$3+$4 > 200’ /etc/passwd
awk -F: ‘/mysql|mail/{print $3+10}’ /etc/passwd //第三个字段加10打印
awk -F: ‘/mysql/{print $3-$4}’ /etc/passwd //减法
awk -F: ‘/mysql/{print $3*$4}’ /etc/passwd //求乘积
awk ‘/MemFree/{print $2/1024}’ /proc/meminfo //除法
awk ‘/MemFree/{print int($2/1024)}’ /proc/meminfo //取整

输出分隔符OFS
awk ‘$6 ~ /FIN/ || NR1 {print NR,$4,$5,$6}’ OFS="\t" netstat.txt
awk '$6 ~ /WAIT/ || NR
1 {print NR,$4,$5,$6}’ OFS="\t" netstat.txt
//输出字段6匹配WAIT的行,其中输出每行行号,字段4,5,6,并使用制表符分割字段

输出处理结果到文件
①在命令代码块中直接输出 route -n|awk ‘NR!=1{print > “./fs”}’
②使用重定向进行输出 route -n|awk ‘NR!=1{print}’ > ./fs

格式化输出
netstat -anp|awk ‘{printf “%-8s %-8s %-10s\n”,$1,$2,$3}’
printf表示格式输出
%格式化输出分隔符
-8长度为8个字符
s表示字符串类型
打印每行前三个字段,指定第一个字段输出字符串类型(长度为8),第二个字段输出字符串类型(长度为8),
第三个字段输出字符串类型(长度为10)
netstat -anp|awk ‘$6==“LISTEN” || NR1 {printf “%-10s %-10s %-10s \n”,$1,$2,$3}’
netstat -anp|awk '$6
"LISTEN" || NR==1 {printf “%-3s %-10s %-10s %-10s \n”,NR,$1,$2,$3}’

IF语句
awk -F: ‘{if($3>100) print “large”; else print “small”}’ /etc/passwd
small
small
small
large
small
small
awk -F: ‘BEGIN{A=0;B=0} {if($3>100) {A++; print “large”} else {B++; print “small”}} END{print A,"\t",B}’ /etc/passwd
//ID大于100,A加1,否则B加1
awk -F: ‘{if($3<100) next; else print}’ /etc/passwd //小于100跳过,否则显示
awk -F: ‘BEGIN{i=1} {if(i<NF) print NR,NF,i++ }’ /etc/passwd
awk -F: ‘BEGIN{i=1} {if(i<NF) {print NR,NF} i++ }’ /etc/passwd
另一种形式
awk -F: ‘{print ($3>100 ? “yes”:“no”)}’ /etc/passwd
awk -F: ‘{print ($3>100 ? $3":\tyes":$3":\tno")}’ /etc/passwd

while语句
awk -F: ‘BEGIN{i=1} {while(i<NF) print NF,$i,i++}’ /etc/passwd
7 root 1
7 x 2
7 0 3
7 0 4
7 root 5
7 /root 6

数组
netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) print i,"\t",a[i]}’
netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) printf “%-20s %-10s %-5s \n”, i,"\t",a[i]}’
9523 1
9929 1
LISTEN 6
7903 1
3038/cupsd 1
7913 1
10837 1
9833 1

应用1
awk -F: ‘{print NF}’ helloworld.sh //输出文件每行有多少字段
awk -F: ‘{print $1,$2,$3,$4,$5}’ helloworld.sh //输出前5个字段
awk -F: ‘{print $1,$2,$3,$4,$5}’ OFS=’\t’ helloworld.sh //输出前5个字段并使用制表符分隔输出
awk -F: ‘{print NR,$1,$2,$3,$4,$5}’ OFS=’\t’ helloworld.sh //制表符分隔输出前5个字段,并打印行号

应用2
awk -F’[:#]’ ‘{print NF}’ helloworld.sh //指定多个分隔符: #,输出每行多少字段
awk -F’[:#]’ ‘{print $1,$2,$3,$4,$5,$6,$7}’ OFS=’\t’ helloworld.sh //制表符分隔输出多字段

应用3
awk -F’[:#/]’ ‘{print NF}’ helloworld.sh //指定三个分隔符,并输出每行字段数
awk -F’[:#/]’ ‘{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12}’ helloworld.sh //制表符分隔输出多字段

应用4
计算/home目录下,普通文件的大小,使用KB作为单位
ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size is:”,sum/1024,“KB”}’
ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size is:”,int(sum/1024),“KB”}’ //int是取整的意思

应用5
统计netstat -anp 状态为LISTEN和CONNECT的连接数量分别是多少
netstat -anp|awk ‘$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum) printf “%-10s %-6s %-3s \n”, i," ",sum[i]}’

应用6
统计/home目录下不同用户的普通文件的总数是多少?
ls -l|awk ‘NR!=1 && !/^d/{sum[$3]++} END{for (i in sum) printf “%-6s %-5s %-3s \n”,i," ",sum[i]}’
mysql 199
root 374
统计/home目录下不同用户的普通文件的大小总size是多少?
ls -l|awk ‘NR!=1 && !/^d/{sum[$3]+=$5} END{for (i in sum) printf “%-6s %-5s %-3s %-2s \n”,i," ",sum[i]/1024/1024,“MB”}’

应用7
输出成绩表
awk ‘BEGIN{math=0;eng=0;com=0;printf “Lineno. Name No. Math English Computer Total\n”;printf “------------------------------------------------------------\n”}{math+=$3; eng+=$4; com+=$5;printf “%-8s %-7s %-7s %-7s %-9s %-10s %-7s \n”,NR,$1,$2,$3,$4,$5,$3+$4+$5} END{printf “------------------------------------------------------------\n”;printf “%-24s %-7s %-9s %-20s \n”,“Total:”,math,eng,com;printf “%-24s %-7s %-9s %-20s \n”,“Avg:”,math/NR,eng/NR,com/NR}’ test0
(18)sed:sed [选项] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
function:
a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)
c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;
i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 一般是替换符合条件的字符串而不是整行
一般function的前面会有一个地址的限制,例如 [地址]function,表示我们的动作要操作的行。下面我们通过具体的例子直观的看看sed的使用方法。
(19)tar: 归档并且压缩
tar -cjf *.tar.bz2 filelist //压缩
tar -xvf *.tar.bz2 // 解压
tar -czf *.tar.gz filelist
(20)gzip:压缩 , 没有归档功能, 文件夹不能被压缩
gzip filename // 生成 filename.gz
gunzip *.gz // 解压
(21)diff:比较两个文件的异同
diff file1 file2 -> 比较file1和file2的内容
(22)sort:将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。
(23)uniq:用于报告或忽略文件中的重复行,一般与sort命令结合使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值