先介绍几个属性
-f force强制
-i interactive 提示
-p 创建目录
-r 删除目录
介绍几个符号
~ 用户的家目录
- 上次用户目录
0 标准输入
1 标准输出
2> 标准错误输出
2>&1 把标准错误重定向到标准输出(也可以用>&)
详细解读命令
1、mkdir创建目录
mkdir 一个目录
mkdir -p 多层目录
2、touch 摸
创建不存在的文件
若文件存在,则改变文件的时间戳
3、cat
查看文件的内容 cat oldboy.txt
输入重定向-->多行写入文件 cat >oldboy.txt cat >>oldboy.txt
将几个文件合并为一个文件 cat f1.txt f2.txt > file.txt cat f1.txt f2.txt >> file.txt
【补充:tac】
行反转内容输出
4、ls 查看路径
ls -a 所有文件(隐藏文件也显示出来)
ls -l 文件的详细信息也打印出来
ls -s 文件大小
5、echo
打印到屏幕
写入到文件echo "ABCD" > oldboy.txt echo "ABCD" >> oldboy.txt
6、vi、vim编辑器
:set nu 显示行号
:w write
:q quit
行号+gg 定位当某一行
gg 到文件头部 GG当文件尾部
dd 删除当前行
yy 拷贝当前行
p 粘贴
7、head与tail (默认显示10行)
head -n 10 oldboy.txt 打印前10行
head -n -10 oldboy.txt 打印除了后10行外的其他行
tail同理
【补充】
tail可以跟踪一个文件结尾的变化
tail -f oldboy.txt
================================================================================================
8、复制 cp(复制目录时,加上-r,否则会失败)
提示:最常用的是-a,因为-a包含-r,-p,-d
cp f1.txt /else/f2.txt 如果/else/文件下没有f2.txt,则将f1.txt复制到/else/文件下,并改名为f2.txt ;如果/else/文件下有f2.txt,会提示是否覆盖。
cp -r /data1 /else/ 将目录data1复制到/else/下
9、删除 rm remove(删除目录时,加上-r,否则会失败)
-f 强制删除,不会提示
-i 提示是否删除
-r 删除目录
10、移动、改名 mv(移动目录时,不用加-r)
提示:移动不用任何属性
mv f1.txt f2.txt 如果当前目录下没有f2.txt,执行的操作是:把f1.txt改名为f2.txt
目录也同理:
mv dir1 dir2 将目录dir1改名为dir2
================================================================================================
【属性介绍】
-r 目录
-v 不包含 没有-v表示包含
-n 行号
【符号介绍】
[ ] 用来框出来一个范围,例如:[0-9] [a-z] [a-zA-Z] //注意:中间用的是 - ,而不是 ..
^两种含义
[^] ^在[] 内,表示反向选择
^[] ^在[] 外,表示以_____为开头
^[^ ] 表示,查找以[^ ]为开头的内容
三剑客
1、grep 文件的搜索工具 “过滤”
-E(同时过滤多个字符串)
i(忽略大小写)
(1)
grep 'test' d* 在文件名为d*下搜索字符串为'test'的并打印出来
find /data -name "da*" -type f | xargs grep 'ee' 搜索到多个文件,在查找文件中(而不是目录中)有关键字为'ee'的项,并打印输出
(2)
grep -v 'test' oldboy.txt 不包含'test'的输出
(3)
grep [^0-3] oldboy.txt 查找oldboy.txt中不包含0-3的内容
grep ^[^0-3] oldboy.txt 查找oldboy.txt中不以0-3为开头的内容
(4)行首^ 行尾$
查找空白行 grep '^$' oldboy.txt
查找以.结尾 grep '\.$' oldboy.txt
(5).一个元素 _*表示0个_元素或者0个以上的_元素
例子
grep 'QQQ*' oldboy.txt 查找两个或者两个以上的包含Q的内容(至少两个Q)
grep g..d oldboy.txt g和d中间只有两个任意元素
grep g.*d oldboy.txt g和d中间有任意个数的任意元素
grep g'[0-9][0-9]*' oldboy.txt g和d中间有任意个数的数字元素
2、sed 管道命令 “行” “取各种内容”
链接:http://blog.csdn.net/improve100/article/details/50956173
查找 p 输出指定内容,但默认会输出2次匹配的结果;因此使用-n取消默认输出
增加 a 追加文本到指定行后 i 插入文本到指定行
删除 d 删除指定的行 打印文件内容但不包含oldboy
替换 s###g c 用新行取代旧行
(1)查找
sed -n '1~2p' person.txt 说明:取行就用sed,最简单
sed -n '/CTO/p' person.txt 按字符串查询
混合查询
sed -n '2,/CFO/p' person.txt
sed -n '/feixue/,2p' person.txt 特殊情况,前两行没有匹配到feixue,就向后匹配,如果匹配到feixue就打印此行
(2)新增 a i
单行增加
sed '2a 106,dandan,CSO' person.txt a 追加文本到2行后
sed '2i 106,dandan,CSO' person.txt i 插入文本到指定行2行
多行增加 无非就是有\n
sed '2a 106,dandan,CSO\n107,bingbing,CCO' person.txt
(3)删除 d
sed '1,2d' oldboy.txt 除去oldboy.txt中1-2行的内容,把其他的输出
sed '10,$d' oldboy.txt 除去oldboy.txt中10-末尾的内容,并把其他的内容输出
sed '/oldboy/d' person.txt 删除包含"oldboy"的行
(4)替换
c :c 用新行取代旧行
sed '2c ABCDEFG' oldboy.txt 用新行ABCDEFG替换第2行
's#▇#▲#g' :字符串替换
sed 's#ABCD#abcd#g' oldboy.txt 替换,只是替换后输出,并没有改变文件的内容
练习题:
题目1、如何过滤出已知当前目录下的所有一级目录(提示:不好喊oldboy目录下面目录的子目录以及隐藏目录,即只是一级目录)
ls -l 中以d开头的就是目录
答1:ls -l . | grep ^d .表示当前目录,d表示目录
正则表达式:
^表示以____开头,如:^d
$表示以____结尾,如:oldboy$
^$表示空行
[^]:^在[]里面表示“非”
或者
ls -dl */
ls -l | sed -n '/^d/p' -n取消默认输出 p打印
答2:
ls -F . | grep /$ ___$表示以什么结尾
注:ls -F输出结果后边以/结尾的是目录
答3:
find . -type d -maxdepth 1 -mindepth 1
小结:
(1)主要是ls的相关参数的实战应用
ls的参数:
-p -F 在每个文件名后附上一个字符以阐明该文件的类型,“*”表明可执行的一般文件; “/”表明目录; “@”表明符号连接; “|”表明FIFOs; “=”表明套接字(sockets)。
-d 目录directory
-l 列出文件的具体信息。
-i 输出文件的 i 节点的索引信息。
(2)共给出了7中方法,当前能熟练记住前两中ls的用法即可,find也是个重要命令
(3)本文用到的find的参数有: -type , -name , ! 非
题目2、