- Linux常用命令——文件管理
- Linux常用命令——文本编辑
- Linux常用命令——系统管理
- Linux常用命令——其他
文本编辑
echo
输出内容到标准输出,并在后面增加换行
参数说明:
- -n 末尾不加换行
- -e 开启输出字串中对反斜杠的转译
- 注意:只有开启-e参数的时候,下面的命令才起作用
\\
输出反斜杠- \a 报鸣
- \b 退格
- \c 抑制当前行换行(但是结果是\c后面的字符都没有显示)
- \f 填表格(就是新起一行打印,但是纵向的位置不变)
- \n 换行
- \r 回车(但是结果是\r前面的字符都没有显示)
- \t 水平制表符
- \v 垂直制表符(效果好像和\f一样)
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
输出结果:
OK!
It is a test
cat
显示文件内容
tac(反向cat)反向显示文件内容(参数不同)
# 显示整个文件
cat filename
# 从键盘创建一个文件(不能编辑已有文件)
# > 详见shell重定向
cat > filename << 终止符
# 将几个文件合并为一个文件
cat file1 file2 > file
参数说明:
- -b 对非空输出行号
- -n 输出所有行号
head
显示文件内容,默认输出10行
参数说明:
- -n<行数> 显示的行数(可以为负)
- -c<数目> 显示的字节数
tail
显示文件末尾内容
参数说明:
- -f 循环读取
- -n<行数> 显示的行数(只有+n和n)
注意:
tail -n -5 a.txt
与tail -n 5 a.txt
显示的结果相同tail -n +5 a.txt
显示的内容为从第 5 行开始,直到末尾的内容- tail -n 后面的数字有效输入只有单个数字(5)或者加号连接数字(+5)两种
wc
统计指定的文件中字节数、字数、行数
命令格式:
wc [option] file
命令参数:
- -c 统计字节数
- -l 统计行数
- -m 统计字符数
- -w 统计词数,一个字被定义为由空白、跳格或换行字符分隔的字符串
grep
查找文件里符合条件的字符串,并显示
命令格式:
grep [参数] 查找的字符串 文件名
参数说明:
- -c 计算找到的次数
- -i 忽略大小写
- -v 反向选择(不符合条件)
- -n 输出行号
- -e 正则表达式
# 递归查找符合条件的文件
# 例:查找指定目录/etc/abc及其子目录下所有文件中包含字符串"test"的文件,并打印出该字符串所在行的内容
grep -r test /etc/abc
xargs
xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
由于很多命令不支持|管道来传递参数,所以就有了 xargs 命令
xargs一般用法:
- 将管道或标准输入(stdin)数据转换成命令行参数
- 从文件的输出中读取数据
- 将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行
- 捕获一个命令的输出,然后传递给另外一个命令
- xargs 默认的命令是 echo,换行和空白将被空格取代
命令格式:
somecommand |xargs -item command
参数说明:
- -a file 从文件中读入作为 stdin
- -e flag 注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止
- -p 当每次执行一个argument的时候询问一次用户
- -n num 命令在执行的时候一次用的argument的个数,默认是用所有的
- -i 将xargs的每项名称,一行一行赋值给 {}
- -r 当xargs的输入为空的时候则停止xargs
- -l num 从标准输入一次读取 num 行送给 command 命令
- -d delim 指定分隔符,默认的xargs分隔符是回车
- -0 用
\0
即NULL来作为分隔符 通常配合 find print0
例:
# xargs让不支持管道的命令可以使用
find /sbin -perm +700 |ls -l #这个命令是错误的
find /sbin -perm +700 |xargs ls -l #这样才是正确的
重新格式化数据
定义一个测试文件,内有多行文本数据:
# cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
多行输入 单行输出:
# cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z
-n 选项 多行输出:
# cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z
指定分隔符
-d 选项可以自定义一个定界符:
# echo "nameXnameXnameXname" | xargs -dX
name name name name
结合 -n 选项使用:
# echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name
捕获输出 当参数传递
假设一个命令为 sk.sh
一个保存参数的文件为 arg.txt:
#!/bin/bash
#sk.sh命令内容,打印出所有参数。
echo $*
arg.txt文件内容:
# cat arg.txt
aaa
bbb
ccc
使用 -i 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉
每一个参数 命令都会被执行一次:
# cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l
复制所有图片文件到 /data/images 目录下:
ls *.jpg | xargs -n1 -I {} cp {} /data/images
结合 find
用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long.
用 xargs 去避免这个问题:
find . -type f -name "*.log" -print0 | xargs -0 rm -f
统计一个源代码目录中所有 php 文件的行数:
find . -type f -name "*.php" -print0 | xargs -0 wc -l
查找所有的 jpg 文件,并且压缩它们:
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
其他应用
假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接:
cat url-list.txt | xargs wget -c
sed
依照脚本指令处理、编辑文本文件
语法格式:
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
- -e<script> 在命令行以指定的script来处理输入的文本文件(默认)
- -f<script文件> 以指定的script文件来处理输入的文本文件
- -r 支持扩展表达式
- -i 直接修改文件内容
- -n 仅显示script处理后的结果
- -h 显示帮助
- -V 显示版本信息
动作说明:
- a\ 新增 接字符串,在下一行出现
- c\ 取代 接字符串,取代 n1,n2 之间的行
- d 删除
- i\ 插入 接字符串,在上一行出现
- p 打印
- w 保存 接文件名,保存成文件
- = 显示行号
注意:
- 没有 -e 时sed后需要用单引号包裹
- 同时使用2个-e执行2个命令
- 同时执行两个动作需要用{}包裹,如:{=;p}
- !表示与之前匹配的相反,通常在动作前
script语法:
- 动作:[范围] [动作] [内容]
- 搜索:/被搜索字符串/[动作]
- s/要被取代的字串/新的字串/g(类似vim)
^$ 表示空白行
^x 表示行首是x
x$ 表示行尾是x
范围说明:
格式 | 含义 |
---|---|
x,y | 第x行到第y行 |
/x/ | 匹配到x的行 |
/x/,/y/ | 同时包含x,y的行 |
/x/,y | 从第一次匹配到x的行到第y行 |
x,/y/ | 第x行到第一次匹配到x的行 |
x,y! | 查询不包含指定行号x和y的行 |
Comments NOTHING