linux文件操作

文件压缩解压操作
文件打包压缩:
tar zcvf FileName.tar.gz DirName
tar jcvf FileName.tar.bz2 DirName
tar jcvf FileName.tar.xz DirName
解压压缩包:
.tar.gz------------> tar zxvf *.tar.gz
.tar.bz2-----------> tar jxvf *.tar.bz2
.tar.xz------------> tar jxvf *.tar.xz

① 文件内容查看
cat filename //一次性把全部内容都输出到终端 tail -n 3:显示最后3行

    tail -n +3:从第3行到文件结尾
  //将1.txt的第3-8行内容输出到2.txt
  cat 1.txt|head -n 8|tail -n +3 > 2.txt //cat 1.txt|head -n 8|tail -n 6 > 2.txt
  cat 1.txt|tail -n +3|head -n 6 > 2.txt //cat 1.txt|tail -n 7|head -n 6 > 2.txt
  sed -n '3,8p' 1.txt > 2.txt 
  sed -n '/\\$/p' ab        //查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义

8.jpg

cut -d ‘|’ -f1 //对文本按给定的分割符(|)执行分割操作返回子集数组(索引起始为1),然后取第1个子集
more filename //通过敲回车方式逐行查看文件内容 q键结束查看
less filename //"上下左右"键方式查看文件各部分内容(支持回看) q键结束查看
head -n filename //查看文件的前n行内容
tail -n filename //查看文件的最后n行内容
wc filename //查看文件内容行数

② 创建文件

touch filename //在当前目录创建filename文件
touch dir/filename //在指定目录下创建filename文件
touch /home/jinnan/dir/newfile //通过绝对路径方式创建newfile文件

③ 给文件追加内容

echo 内容 > 文件 //把“内容”以覆盖写方式添加到文件中
echo 内容 >> 文件 //把“内容”以“追加”方式添加到文件中

(使用以上两个指令时,文件不存在会自动创建)

在指定文件中搜寻内容

grep 被搜寻内容 文件 //被搜寻内容所在行的信息都会输出

find文件查找指令

find 被查找目录 选项 选项值[ 选项 选项值 选项 选项值]
具体选项:
-name 文件名字 //直接根据文件名字查找文件
find / -name passwd //把系统全部目录“递归”遍历一次,进行passwd文件查找
find ./ -name "o*" //在当前目录下模糊查找o字符作为开始内容的文件名字
-size 大小 //直接根据文件大小查找文件
单位:默认512字节

 100c  字节单位(大小:100\*1)
 12k   千字节单位(大小:12\*1024)
 35    512字节(大小:35\*512)
 5m    兆字节(大小:5\*1024\*1024)       

范围:+(大于)/-(小于)

 find  ./  -size  23c    //找到大小为23字节的文件
 find  ./  -size  +7k    //找到大小大于7k的文件
 find  ./  -size  -100c  //找到大小小于100字节的文件

-maxdepth 层次 //限制最深层次查找文件

 find  /  -maxdepth  4  -name  passwd   //限制最深为4个目录层次,进行passwd文件查找

-mindepth 层次 //限制最浅层次查找文件
-perm 权限 //把符合某个权限的文件给查找出来
-user 主人名字 //通过主人查找文件
-group 组名字 //通过组别查找文件
-type f/d //根据“文件/目录”查找

sort文件输出排序命令
sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式:
  sort -bcCdfimMnrtku[-o 输出文件]
补充说明:sort可针对文本文件的内容,以行为单位来排序。

参  数:
-b 忽略每行前面开始出的所有空格字符,从第一个可见字符开始比较;
-c 检查文件是否已经按照顺序排序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1;
-C 检查文件是否已经按照顺序排序,如果乱序,不输出内容,仅返回1;
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f 排序时,忽略大小写字母,将小写字母视为大写字母;
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符(不可打印字符);
-m 将几个排序号的文件进行合并;
-M 将前面3个字母依照月份的缩写进行排序;
-n 依照数值的大小排序;
-o<输出文件> 将排序后的结果存入指定的文件;
-r 以相反的顺序来排序,默认排序是以小到大升序排列;
-t<分隔字符> 指定排序时所用的栏位分隔字符;
-k 选择以哪个区间进行排序;
-u 在输出行中去除重复行;

+<起始栏位>-<结束栏位>:已淘汰!以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

On older systems, `sort’ supports an obsolete origin-zero syntax `+POS1 [-POS2]‘ for specifying sort keys.  POSIX 1003.1-2001 (*note Standards conformance::) does not allow this; use `-k’ instead.

加号表示Start部分,减号表示End部分。
重要的一点是,这种方式是从0开始计数的,现在所说的第一个域,在此被表示为第0个域。

1.sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear

用户可以保存排序后的文件内容,或把排序后的文件内容输出至打印机。
下例中用户把排序后的文件内容保存到名为result的文件中。

$ Sort seq.txt > result.txt

2.sort的-o选项
由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。
但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。

[rocrocket@rocrocket programming]$ sort -r number.txt > number.txt
[rocrocket@rocrocket programming]$ cat number.txt
[rocrocket@rocrocket programming]$

看,竟然将number清空了。
就在这个时候,-o选项出现了,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。

[rocrocket@rocrocket programming]$ sort -r number.txt -o number.txt

3.因为sort默认比较原则是从首字符向后,依次按ASCII码值进行比较,所以会出现10排在2后的情况,我们可以使用-n设定按照数值来排序

[rocrocket@rocrocket programming]$ sort -n number.txt

4.sort的-t选项和-k选项
如果有一个文件的内容是这样:

[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4

这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。
那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?
幸好,sort提供了-t选项,后面可以设定间隔符。指定了间隔符之后,就可以用-k来指定列数了。
也可以写成sort -nk 2 -t: facebook.txt,-t后的分隔符可以不用加单引号,元字符|分隔时可以使用\|转义

[rocrocket@rocrocket programming]$ sort -n -k 2 -t ‘:’ facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3

-k选项的语法格式:

FStart.CStart Modifie,FEnd.CEnd Modifier
-------Start--------,-------End--------
 FStart.CStart 选项  ,  FEnd.CEnd 选项

这个语法格式可以被其中的逗号,分为两大部分,Start部分和End部分。
Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。
我们重点说说Start部分的FStart和C.Start。C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。
同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。
或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。

从公司英文名称的第二个字母开始进行排序:

$ sort -t ' ' -k 1.2 facebook.txt
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000

使用了-k 1.2,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。
你会发现baidu因为第二个字母是a而名列榜首。
sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。

只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:

$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000

由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2的表示方式,表示我们“只”对第二个字母进行排序。
如果你问“我使用-k 1.2怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序。
对于员工工资进行排序,我们也使用了-k 3,3,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了。

标签: file, find, tar, sort, sed, cat

添加新评论