镜像下载、域名解析、时间同步请点击 [阿里云开源镜像站](https://links.jianshu.com/go?to=https%3A%2F%2Fdeveloper.aliyun.com%2Fmirror%2F%3Futm_content%3Dg_1000303593)
## 准备
作为一个经常在服务器上游走的后端,需要熟悉不少命令行操作。其中,grep、sed、awk号称"linux三剑客",使用频繁,功能强大,本文通过一个实例演示下基本用法。首先准备一个文本文件,命名为text.txt,内容如下:
~~~undefined
cat text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
## grep
首先,最简单的是grep。经常用来过滤查看日志。对于grep需要知道如下几个常用的命令选项:
### \-n
额外输出行号。例如过滤出每一行包含"青"的记录:
~~~bash
grep -n "青" text.txt
1:1 province 省份 青海省
3:3 subject_no 主体备案号 青ICP备11000289号
4:4 addr 注册地址 青海省西宁市城中区南关街138号
7:7 site_no 网站备案/许可证号 青ICP备11000289号-2
~~~
### \-v
排除匹配的行。例如排除包含"青"的行记录:
~~~bash
grep -v '青' text.txt
2 domain 域名或者ip tianfengyinlou.cn
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
### \-E
支持扩展正则匹配。grep的时候,我们可以按照正则表达式来进行匹配,但在需要扩展正则匹配时,要通过-E指定才能生效。常见的或操作,比如筛选包含"青海省"或者"青ICP"的行记录,不指定-E是无法获得想要的结果的。
~~~bash
grep -E '青海省|青ICP' text.txt
1 province 省份 青海省
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
7 site_no 网站备案/许可证号 青ICP备11000289号-2
~~~
### \-l
只输出有匹配行的文件名。有时候,我们并不需要输出匹配的行记录,仅仅只是需要知道匹配到了行记录的文件名:
~~~css
grep -l 青 text.txt
text.txt
~~~
### \-R
递归匹配目录中的文件内容。有时候,在一个目录中我们并不知道哪个文件内容包含我们想要的结果,此时,可以查找整个目录,输出匹配的文件名以及行记录:
~~~bash
grep -R 青海 ./DevMisc
# ...
./DevMisc/linux三剑客.md:1 province 省份 青海省
./DevMisc/linux三剑客.md:4 addr 注册地址 青海省西宁市城中区南关街138号
./DevMisc/text.txt:1 province 省份 青海省
./DevMisc/text.txt:4 addr 注册地址 青海省西宁市城中区南关街138号
~~~
结合-l参数就可以知道一个目录中有哪些文件包含了匹配项:
~~~undefined
grep -Rl 青 ./DevMisc
./DevMisc/linux三剑客.md
./DevMisc/text.txt
~~~
### \-A
通过-A(after)指定输出匹配行后的额外行数。例如,想要额外输出包含"青"的行记录后一行,可以指定-A1:
~~~undefined
grep -A1 青 text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
--
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
--
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
~~~
### \-B
通过-B(before)指定输出匹配行前的额外行数。例如,想要额外输出包含"青"的行记录前一行,可以指定-B1:
~~~undefined
grep -B1 青 text.txt
1 province 省份 青海省
--
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
--
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
~~~
### \-C
通过-C指定输出匹配行前后的额外行数。例如,想要额外输出包含"青"的行记录前后各一行,可以指定-C1:
~~~undefined
grep -C1 青 text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
--
--
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
--
--
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
~~~
## sed
### 查找
sed的各项操作需要指定一个特定的动作。查找需要指定一个动作为p(print),例如,打印出第三行的记录,需要指定行号加动作3p:
~~~css
sed -n 3p text.txt
3 subject_no 主体备案号 青ICP备11000289号
~~~
这里必须指定一个选项-n。因为sed的默认行为是遍历文本文件的每一行并输出每一行,假如不带-n选项,第三行会输出两次=默认输出一次+命令行指定输出一次:
~~~undefined
sed 3p text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
所以-n的作用是取消sed的默认输出行为, 一般都只与p组合使用。利用sed的默认输出行为,我们可以模拟复制每一行的操作,有时候在特定场景下非常有用:
~~~undefined
sed p text.txt
1 province 省份 青海省
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
sed不仅可以输出指定的某一行,还可以按行号范围进行输出,例如输出1-5行:
~~~css
sed -n 1,5p text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
~~~
sed还可以按照正则匹配来输出特定的行。格式为/xx/p, 例如,查找包含"青海省"的行记录:
~~~bash
sed -n '/青海省/p' text.txt
1 province 省份 青海省
4 addr 注册地址 青海省西宁市城中区南关街138号
~~~
查找包含数字0到6的行记录:
~~~bash
sed -n '/[0-6]/p' text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
~~~
查找以0结尾的行记录:
~~~bash
sed -n '/0$/p' text.txt
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
~~~
如果想要支持扩展正则匹配,需要通过-r来指定,例如查找每一行包含"青海省"或者"青"的记录:
~~~bash
sed -nr '/青海省|青/p' text.txt
1 province 省份 青海省
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
7 site_no 网站备案/许可证号 青ICP备11000289号-2
~~~
sed正则匹配也支持按范围输出,格式为/xx/,/xx/p。例如查找包含"domain"的行到包含"addr"的行记录:
~~~bash
sed -n '/domain/,/addr/p' text.txt
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
~~~
### 删除
~~~ruby
# 删除第三行
sed 3d text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
# 删除包含青的行
sed '/青/d' text.txt
2 domain 域名或者ip tianfengyinlou.cn
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
# 更改text.txt
cat text.txt ysj@yangsj2-knownsec
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
#5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
#6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
# 删除空行和注释行
sed -r '/^$|#/d' text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
### 增加
sed的增加动作有三种:
* i:在指定行的上方增加一行
* a: 在指定行的下方增加一行
* c: 在指定行的地方增加一行,原有行会被覆盖
上述三种增加行为示例为:
注意:示例的增加行为在mac上会报错,可能在mac上用法不一致。
~~~bash
# 在第3行上方增加一行记录
sed '3i insert oneline above 3rd line' text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
insert oneline above 3rd line
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
# 在第3行下方增加一行记录
sed '3a insert oneline after 3rd line' text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
insert oneline after 3rd line
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
# 在第3行创建一行记录,原记录被替换
sed '3c create oneline at 3rd line' text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
create oneline at 3rd line
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
### 修改
上述所有的操作输出均没有改变文件自身的内容。想要使得操作改变文件自身的内容,需要指定选项-i。指定-i的操作需要格外小心。
例如,在文件中第一行插入一行记录:
~~~csharp
sed -i '1i add oneline above first line' text.txt
cat text.txt
add oneline above first line
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
sed的删除动作为d(delete),例如删除文件中的第一行:
~~~bash
# 删除增加的第一行
sed -i 1d text.txt
cat text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
当然,我们也有办法做安全的删除操作,即将-i换成-i.bak 可以在真实改动文件内容前,备份文件。但是这个操作一般不适合应用在大文件上,因为备份很慢。
~~~bash
# 删除第一行并备份
sed -i.bak 1d text.txt
cat text.txt
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
cat text.txt.bak
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
### 替换
sed可以对文件内容进行替换(substitute),格式为使用任意三个相同的符号,如三个斜线s/xx/yy/g、三个#号s#xx#yy#g、三个@符号s@xx@yy@g等,效果是将xx替换为yy。
这里的符号选择是任意的,可以是三个1,三个2都行。常用的是上述三种,因为和文件内容重合度最小,具体使用哪种,需要根据文件内容选择。如果文件内容本身包含了/,则不方便使用三个斜线来操作。
~~~bash
# 将"青" 替换为"蜀"
sed 's/青/蜀/g' text.txt
1 province 省份 蜀海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 蜀ICP备11000289号
4 addr 注册地址 蜀海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 蜀ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
# 将第三行的青替换为蜀
sed '3s/青/蜀/g' text.txt
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 蜀ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
# 把所有数字替换为x
sed -r 's/[0-9]/x/g' text.txt
x province 省份 青海省
x domain 域名或者ip tianfengyinlou.cn
x subject_no 主体备案号 青ICP备xxxxxxxx号
x addr 注册地址 青海省西宁市城中区南关街xxx号
x check_time 备案时间, 时间对象 xxxx-xx-xx xx:xx:xx
x update_time 更新时间, 毫秒级时间戳 xxxxxxxxxxxxx
x site_no 网站备案/许可证号 青ICP备xxxxxxxx号-x
x site_url 站点/网站首页网址 www.tianfengyinlou.cn
x comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
g是全局(gloabal)替换的意思,如果不要g,则只会替换匹配到的第一项:
~~~bash
# 把每一行的第一个数字替换为x
sed -r 's/[0-9]/x/' text.txt
x province 省份 青海省
x domain 域名或者ip tianfengyinlou.cn
x subject_no 主体备案号 青ICP备11000289号
x addr 注册地址 青海省西宁市城中区南关街138号
x check_time 备案时间, 时间对象 2011-06-23 16:38:00
x update_time 更新时间, 毫秒级时间戳 1607414120745
x site_no 网站备案/许可证号 青ICP备11000289号-2
x site_url 站点/网站首页网址 www.tianfengyinlou.cn
x comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
### 反向引用
反向引用就是利用正则的组匹配来以组为单位进行替换。
~~~xml
# 例如匹配所有的英文词句([a-z_.]+),然后把他们用<>括起来, \1表示第一组,这里只有一个组匹配
sed -r 's/([a-z_.]+)/<\1>/g' text.txt
1 <province> 省份 青海省
2 <domain> 域名或者<ip> <tianfengyinlou.cn>
3 <subject_no> 主体备案号 青ICP备11000289号
4 <addr> 注册地址 青海省西宁市城中区南关街138号
5 <check_time> 备案时间, 时间对象 2011-06-23 16:38:00
6 <update_time> 更新时间, 毫秒级时间戳 1607414120745
7 <site_no> 网站备案/许可证号 青ICP备11000289号-2
8 <site_url> 站点/网站首页网址 <www.tianfengyinlou.cn>
9 <comp_name> 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
## awk
### 取行
awk可以通过NR(Number of Record) 指定行号,输出特定的行:
~~~bash
# 输出第三行
awk 'NR==3' text.txt
3 subject_no 主体备案号 青ICP备11000289号
~~~
也可以按行号范围输出:
~~~bash
# 输出第三到第六行
awk 'NR==3, NR==6' text.txt
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
# 也可以通过比较指定输出范围
# 输出3到4行
awk 'NR>=3 && NR<5' text.txt
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
~~~
第二个NR如果是个无效的行号值,则默认取出指定起始行之后所有的行记录:
~~~bash
# 输出第三行之后的所有行
awk 'NR==3, NR==xx' text.txt
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象 2011-06-23 16:38:00
6 update_time 更新时间, 毫秒级时间戳 1607414120745
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
取行操作依然支持正则匹配:
~~~bash
# 输出包含青的行
awk '/青/' text.txt
1 province 省份 青海省
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
7 site_no 网站备案/许可证号 青ICP备11000289号-2
# 输出以"号"结尾的行
awk '/号$/' text.txt
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
# 输出包含domain到包含addr的行
awk '/domain/, /addr/' text.txt
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
~~~
### 取列
awk可以使用{print $列号} 取出列值:
~~~dart
# 例如,取出第二列的值
awk '{print $2}' text.txt
province
domain
subject_no
addr
check_time
update_time
site_no
site_url
comp_name
# 取出第2列及最后一列NF(Number of Fields)的值
awk '{print $2,$NF}' text.txt
province 青海省
domain tianfengyinlou.cn
subject_no 青ICP备11000289号
addr 青海省西宁市城中区南关街138号
check_time 16:38:00
update_time 1607414120745
site_no 青ICP备11000289号-2
site_url www.tianfengyinlou.cn
comp_name 西宁天丰银楼金银珠宝有限公司
# 使用column -t 对齐输出
awk '{print $2,$NF}' text.txt | column -t
province 青海省
domain tianfengyinlou.cn
subject_no 青ICP备11000289号
addr 青海省西宁市城中区南关街138号
check_time 16:38:00
update_time 1607414120745
site_no 青ICP备11000289号-2
site_url www.tianfengyinlou.cn
comp_name 西宁天丰银楼金银珠宝有限公司
~~~
awk取列时,默认是空格为分隔符,可以通过-F指定分隔符,例如,第7-8行:
~~~bash
awk "NR==7,NR==8" text.txt
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
~~~
取出第7、8行后,按/进行划分,取出划分后的第二列:
~~~dart
awk "NR==7,NR==8" text.txt | awk -F/ '{print $2}'
许可证号 青ICP备11000289号-2
网站首页网址 www.tianfengyinlou.cn
~~~
\-F 可以通过\[\]正则指定多个分隔符:
~~~dart
# 按空格和/ 进行分隔, 取出1到4列
awk "NR==7,NR==8" text.txt | awk -F'[ /]+' '{print $1,$2,$3,$4}'
7 site_no 网站备案 许可证号
8 site_url 站点 网站首页网址
~~~
### 精确取行列
awk可以精确取出某一行某一列的值。一些用例如:
~~~dart
# ~ 表示包含, !~ 表示不包含
# 取出第四列包含"青"的行
awk '$4 ~ /青/' text.txt
1 province 省份 青海省
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
7 site_no 网站备案/许可证号 青ICP备11000289号-2
# 取出第四列以"号"结尾的行,并输出最后一列
awk '$4 ~ /号$/{print $NF}' text.txt
青ICP备11000289号
青海省西宁市城中区南关街138号
# 取出第2列以d开始,到第四列以号结尾的行记录
awk '$2 ~ /^d/, $4 ~/号$/' text.txt
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
~~~
### BEGIN
awk可以使用BEGIN在操作文件内容前执行一些命令:
~~~swift
# 列如输出表头
awk 'BEGIN{print "序号","名称","含义","示例"} {print $1,$2,$3,$4}' text.txt | column -t
序号 名称 含义 示例
1 province 省份 青海省
2 domain 域名或者ip tianfengyinlou.cn
3 subject_no 主体备案号 青ICP备11000289号
4 addr 注册地址 青海省西宁市城中区南关街138号
5 check_time 备案时间, 时间对象
6 update_time 更新时间, 毫秒级时间戳
7 site_no 网站备案/许可证号 青ICP备11000289号-2
8 site_url 站点/网站首页网址 www.tianfengyinlou.cn
9 comp_name 主办单位名称(公司名称) 西宁天丰银楼金银珠宝有限公司
~~~
### END
awk可以使用END在操作文件内容后执行一些命令:
~~~bash
# 通常用于做统计, 例如对第一列求和
awk '{sum+=$1} END{print sum}' text.txt
45
~~~
## 使用小结
* grep、sed、awk都可以过滤行记录,但过滤行记录时优先选择grep,其过滤行的效率最高。
* sed主要用于对文件内容做出各种修改(增加、替换等)。
* awk主要用于对文件内容取行列操作。
- php开发
- 常用技巧
- 字符数组对象
- php换行替换,PHP替换回车换行符的三种方法
- PHP 数组转字符串,与字符串转数组
- php将img中的宽高删除,PHP删除HTML中宽高样式的详解
- php去除换行(回车换行)的三种方法
- php 过滤word 样式
- php如何设置随机数
- 2个比较经典的PHP加密解密函数分享
- php怎么去除小数点后多余的0
- php中判断是一维数组还是二维数组的解决方案
- php 获取数组中出现次数最多的值(重复最多的值)与出现的次数
- PHP过滤掉换行符、特殊空格、制表符等
- PHP中json_endoce转义反斜杠的问题
- PHP过滤Emoji表情和特殊符号的方法
- PHP完美的提取链接正则
- php很牛的图片采集
- 日期处理
- php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法非常简单
- PHP指定时间戳/日期加一天,一年,一周,一月
- 使用php 获取时间今天明天昨天时间戳的详解
- php获得当月的节假日函数(包含周末,年度节假日)
- PHP获取本月起始和截止时间戳
- php 获取每月开始结束时间,php 获取指定月份的开始结束时间戳
- PHP获取今天,昨天,本月,上个月,本年 起始时间戳
- php、mysql查询当天,本周,本月的用法
- php获取两个时间戳之间相隔多少天多少小时多少分多少秒
- 毫秒级时间戳和日期格式转换
- php-倒计时
- 请求提交上传
- php+put+post,Curl和PHP-如何通过PUT,POST,GET通过curl传递json
- PHP put提交和获取数据
- PHP curl put方式上传文件
- 数据导入导出
- PHP快速导入大量数据到数据库的方法
- PHP快速导出百万级数据到CSV或者EXCEL文件
- PHP解析大型Excel表格的库:box/spout
- PHP导入(百万级)Excel表格数据
- PHP如何切割excel大文件
- 使用 PHP_XLSXWriter 代替 PHPExcel 10W+ 数据秒级导出
- 安装php扩展XLSXWriter
- 解决php导入excel表格时获取日期变成浮点数的方法
- xml处理
- PHP XML和数组互相转换
- php解析xml字符串
- php 生成vcf通讯录
- 文件操作相关
- php获取文件后缀的9种方法
- PHP判断远程文件是否存在
- PHP获取文件修改时间,访问时间,inode修改时间
- php获取远程文件大小教程
- php 读取文件并以文件方式下载
- php 把数字转化为大写中文
- 请求响应
- PHP 获取当前访问的URL
- 压缩
- php生成zip压缩包
- PHPMailer
- 整理PHPMailer 发送邮件 邮件内容为html 可以添加多个附件等
- 通达oa
- OA管理员密码忘了怎么办,这里教你分分钟搞定…
- 跨域
- php解决多站点跨域
- php设置samesite cookie,有效防止CSRF
- Chrome 配置samesite=none方式
- Cookie 的 SameSite 属性
- 图片
- php pdf首页截图,PHP_PHP中使用Imagick读取pdf并生成png缩略图实例,pdf生成png首页缩略图
- PHP -- 七牛云 在线视频 获取某一帧作为封面图
- PHP图片压缩方法
- 如何解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
- php远程下载文章中图片并保存源文件名不变
- 详解PHP如何下载采集图片到本地(附代码实例)
- php如何将webp格式图片转为jpeg
- PHP获取远程图片的宽高和体积大小
- php 软件版本号比较
- 使用PHP通过SMTP发送电邮
- 常用正则表达式
- php如何用正则表达式匹配中文
- 用于分割字符串的 PHP preg_match_all 正则表达式
- 性能优化
- php.ini配置调优
- PHP 几种常见超时的设置方法
- PHP函数in_array、array_key_exists和isset效率分析
- php array push 和array_merge 效率谁高,php 通过array_merge()和array+array合并数组的区别和效率比较...
- php 两个数组取交集、并集、差集
- 设置PHP最大连接数及php-fpm 高并发 参数调整
- 小工具
- php 获取代码执行时间和消耗的内存
- PHP如何判断某项扩展是否开启
- centos7.x下php 导出扩展 XLSXWriter 安装
- php生成mysql数据库字典
- PHP 实现 word/excel/ppt 转换为 PDF
- composer的使用
- showdoc sqlite3 找回管理员密码
- php怎么将数组转为xml
- PHP抖音最新视频提取代码
- yii
- Yii2 如何获取Header参数?
- swoole
- Linux下搭建swoole服务的基本步骤
- 相关学习资料
- 带你学习swoole_process详解
- 按照官方文档 在win10下安装 docker for windows easyswoole镜像 挂载目录
- php常用框架
- Hyperf
- 常用算法PHP版
- thinkphp6
- TP6 事件绑定、监听、订阅
- Thinkphp 模板中输出HTML的变量
- Thinkphp6(操作SQL数据库)
- thinkphp6 mysql查询语句对于为null和为空字符串给出特定值处理
- Thinkphp 6 - 连接配置多个数据库并实现自由切换(详细过程及实例demo)
- TP框架中的Db::name 和 dB::table 以及 db('') 的区别
- thinkphp6.0模型篇之模型的软删除
- thinkphp6自定义日志驱动,增加显示全部请求信息
- 其他系统
- 微擎数据库字段字典
- Flutter实现微信支付和iOS IAP支付
- Flutter上线项目实战——苹果内购
- PHP接入苹果支付
- 调试
- php如何获取当前脚本所有加载的文件
- php跟踪所有调用方法,日志方法
- 解析phpstorm + xdebug 远程断点调试
- PHP XDEBUG调试 PHPSTORM配置
- 异常处理
- PHP 出现 502 解决方案
- php 语法解析错误 syntax error unexpected namespace T_NAMESPACE
- Composer 安装与使用
- 数据库相关
- php pdo怎么设置utf8
- php 如何根据最新聊天对用户进行排序
- php lic&fpm
- 让php程序在linux后台执行
- PHPcli模式和fpm模式优缺点在哪里?
- 运行模式
- php运行模式之cli模式
- 自己库
- php批量获取所有公众号粉丝openid
- 地图
- php 判断点在多边形内,php百度地图api判断地址是否在多边形区域内
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询
- MySQL 根据经纬度查找排序
- PHP+MySQL获取坐标范围内的数据
- 【百度地图】删除指定覆盖物
- 百度地图多点+画连接线+数字标注
- laravel5.8
- laravel5.8(四)引入自定义常量文件及公共函数文件
- Lumen 查询执行SQL
- 使你的 Laravel 项目模块化
- Laravel 多条件 AND , OR条件组合查询
- Laravel 查询 多个or或者and条件
- laravel redis操作大全
- laravel中外部定义whereIn的用法和where中使用in
- lumen5.8
- 创建laravel5.8 lumen前后台api项目--记录请求和响应日志
- Laravel和Lumen开启SQL日志记录
- Laravel 5.8 常用操作(路径+日志+分页+其他操作)
- 升级php7.4 laravel lumen报错Trying to access array offset on value of type null
- Laravel 任务调度(计划任务,定时任务)
- laravel的command定时任务时间的设置
- Laravel任务调度的简单使用
- laravel单数据库执行事务和多数据库执行事务
- laravel中锁以及事务的简单使用
- 申请其他相关
- 小程序地理位置接口申请
- PHP高并发
- php 高并发下 秒杀处理思路
- 记录 PHP高并发 商品秒杀 问题的 Redis解决方案
- thinkphp3.2
- thinkphp3.2 数据库 AND OR连缀使用
- laravel
- laravel的联表查询with方法的使用
- laravel获取请求路由对应的控制器和方法
- Laravel 模型关联建立与查询
- Laravel多表(3张表以上)with[]关联查询,对关联的模型做条件查询(has,跟join一样结果 )
- Laravel模型属性的隐藏属性、显示属性和临时暴露隐藏属性用法介绍
- aravel获取当前的url以及当前的基础域名方法汇总
- Laravel 模型实现多库查询或者多表映射
- 关于 Laravel 的 with 多表查询问题
- Laravel 模型过滤(Filter)设计
- 懒加载、预加载、with()、load() 傻傻分不清楚?
- laravel模型$castsl属性
- Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by
- Laravel 模型关联、关联查询、预加载使用实例
- laravel 中with关联查询限定查询字段
- laravel 原生字段查询 whereRaw 和 where(DB::raw(''))
- lavarel - where条件分组查询(orWhere)
- 通过 Laravel 查询构建器实现复杂的查询语句
- 两个结果集合并成一个
- Laravel 对某一列进行筛选然后求和 sum()
- laravel怎么优雅的拼接where,处理whereIn与where数组查询的问题
- laravel查询时判断是否存在数据
- laravel中的whereNull和whereNotNull
- laravel框架中的子查询
- Laravel框架中 orwhere 多条件查询的使用
- Laravel中where的高级使用方法
- laravel复杂的数据库查询(事例)
- laravel多条件查询方法(and,or嵌套查询)
- Laravel 的 where or 查询
- Laravel 进行where 多个or和and的条件查询可用
- laravel Middleware 中间件 $next($request) 报错不执行问题
- 数据库
- mysql
- mysql联合索引(复合索引)详解
- MYSQL 清空表和截断表
- MySQL快速生成大量测试数据(100万、1000万、1亿)
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- MySQL常用命令
- MySQL(三)|《千万级大数据查询优化》第一篇:创建高性能的索引
- MySQL(一)|性能分析方法、SQL性能优化和MySQL内部配置优化
- MySQL(二)|深入理解MySQL的四种隔离级别及加锁实现原理
- MySQL(四)|《千万级大数据查询优化》第一篇:创建高性能的索引(补充)
- MySQL(五)|《千万级大数据查询优化》第二篇:查询性能优化(1)
- MySQL(六)|《千万级大数据查询优化》第二篇:查询性能优化(2)
- MySQL(七)|MySQL分库分表的那点事
- Mysql索引优化 Mysql通过索引提升查询效率(第二棒)
- MySQL查询的性能优化(查询缓存、排序跟索引)
- 【总结】MySQL数据库
- MySQL存储引擎、事务日志并发访问以及隔离级别
- 技巧
- 数据库 SQL查询重复记录 方法
- 替换数据库中某个字段中的部分字符
- mysql开启bin log 并查看bin log日志(linux)
- 分表分区
- 千万级别数据的mysql数据表优化
- MYSQL百万级数据,如何优化
- MySQL备份和恢复
- MySQL间隙锁死锁问题
- 小技巧
- 基础
- MySQL中sql_mode参数
- mysql数据库异常
- this is incompatible with sql_mode=only_full_group_by
- mysql安全
- MySQL数据库被比特币勒索及安全调整
- MongoDB
- sql查询
- MYSQL按时间段分组查询当天,每小时,15分钟数据分组
- 高级
- 基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-架构篇
- 数据库安全
- 服务器被黑,MySQL 数据库遭比特币勒索!该如何恢复?
- 数千台MySQL数据库遭黑客比特币勒索,该怎么破?
- MySQL 数据库规范
- MySQL数据库开发的36条铁律
- Elasticsearch
- 安装与配置
- ElasticSearch关闭重启命令
- 设置ES默认分词器IK analyzer
- 查询
- elasticsearch 模糊查询不分词,实现 mysql like
- elasticSearch多条件高级检索语句,包含多个must、must_not、should嵌套示例,并考虑nested对象的特殊检索
- elasticSearch按字段普通检索,结果高亮
- Elasticsearch 如何实现查询/聚合不区分大小写?
- 索引更新&刷新
- refresh与批量操作的效率
- Elasticsearch 删除type
- 分词器
- ElasticSearch最全分词器比较及使用方法
- 异常错误
- 解决ES因内存不足而无法查询的错误,Data too large, data for [<http_request>]
- linux
- 基本知识
- CentOS7.5 通过wget下载文件到指定目录
- 【CentOS】vi命令
- centos7查看硬盘使用情况
- CentOS7 查看目录大小
- Centos 7下查看当前目录大小及文件个数
- 普通用户sudo\su 到root免密码
- 普通用户切换到root用户下的免密配置方法
- linux 获取进程启动参数,linux查看进程启动及运行时间
- Linux 查看进程
- linux删除文件后不释放磁盘的问题
- Linux查找大文件命令
- linux 如何关闭正在执行的php脚本
- linux三剑客(grep、sed、awk)基本使用
- centos 卸载软件
- centos查看内存、cpu占用、占用前10,前X
- Centos 查看系统状态
- 异常
- 问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:...
- php相关
- centos 安装phpize
- Centos7.2下phpize安装php扩展
- 切换版本
- 运营工具
- 资深Linux运维工程师常用的10款软件/工具介绍
- 一款良心的终端连接工具
- 六款Linux常用远程连接工具介绍,看看哪一款最适合你
- Finalshell
- Linux Finalshell连接centos7和文件无显示问题
- WSL2:我在原生的Win10玩转Linux系统
- MobaXterm
- 运维
- linux服务器上定时自动备份数据库,并保留最新5天的数据
- Centos系统开启及关闭端口
- CentOS7开放和关闭端口命令
- Linux中查看所有正在运行的进程
- 防火墙firewall-cmd命令详解
- centos 7.8阿里云服务器挂载 数据盘
- Linux Finalshell连接centos7和文件无显示问题
- Centos7系统端口被占用问题的解决方法
- vi
- 如何在Vim/Vi中复制,剪切和粘贴
- 命令
- [Linux kill进程] kill 进程pid的使用详解
- 备份还原
- Linux的几种备份、恢复系统方式
- Linux系统全盘备份方法
- 相关软件安装
- linux下 lua安装
- python
- 升级pip之后出现sys.stderr.write(f“ERROR: {exc}“)
- lua
- centos源码部署lua-5.3
- deepin
- deepin20.6设置默认的root密码
- 任务相关
- 宝塔定时任务按秒执行
- CentOS 7 定时任务 crontab 入门
- centos7定时任务crontab
- Linux下定时任务的查看及取消
- Linux(CentOS7)定时执行任务Crond详细说明
- Linux 查看所有定时任务
- linux查看所有用户定时任务
- Linux 定时任务(超详细)
- 防火墙
- Centos7开启防火墙及特定端口
- CentOS防火墙操作:开启端口、开启、关闭、配置
- 生成 SSH 密钥(windows+liunx)
- 阿里云,挂载云盘
- 前端
- layui
- layui多文件上传
- layer.msg()弹框,弹框后继续运行
- radio取值
- layui-数据表格排序
- Layui select选择框添加搜索选项功能
- 保持原来样式
- layui表格单元如何自动换行
- layui-laydate时间日历控件使用方法详解
- layui定时刷新数据表格
- layer 延时设置
- layer.open 回调函数
- 【Layui内置方法】layer.msg延时关闭msg对话框(代码案例)
- layui多图上传图片顺序错乱及重复上传解决
- layer.confirm关闭弹窗
- vue
- Vue跨域解决方法
- vue 4.xx.xx版本降级至2.9.6
- vue-cli 2.x升级到3.x版本, 和3.x降级到2.x版本命令
- 最新版Vue或者指定版本
- Vue2.6.11按需模块安装配置
- jQuery
- jQuery在页面加载时动态修改图片尺寸的方法
- jquery操作select(取值,设置选中)
- 日历
- FullCalendar中文文档:Event日程事件
- js
- JS 之 重定向
- javascript截取video视频第一帧作为封面方案
- HTML <video> preload 属性
- jQuery使用ajax提交post数据
- JS截取视频靓丽的帧作为封面
- H5案例分享:移动端touch事件判断滑屏手势的方向
- JS快速获取图片宽高的方法
- win
- Windows环境下curl的使用
- Cygwin
- Windows下安装Cygwin及apt-cyg
- Cygwin 安装、CMake 安装
- mklink命令 详细使用
- Nginx
- Nginx高级篇-性能优化
- Nginx常用命令(Linux)
- linux+docker+nginx如何配置环境并配置域名访问
- Nginx的启动(start),停止(stop)命令
- linux 查看nginx 安装路径
- 安装配置
- Linux 查看 nginx 安装目录和配置文件路径
- 【NGINX入门】3.Nginx的缓存服务器proxy_cache配置
- thinkphp6.0 伪静态失效404(win下)
- 深入
- nginx rewrite及多upstream
- Nginx负载均衡(upstream)
- 专业术语
- 耦合?依赖?耦合和依赖的关系?耦合就是依赖
- PHP常用六大设计模式
- 高可用
- 分布式与集群
- Nginx 实践案例:反向代理单台web;反向代理多组web并实现负载均衡
- 容器
- Docker
- 30 分钟快速入门 Docker 教程
- linux查看正在运行的容器,说说Docker 容器常用命令
- Windows 安装Docker至D盘
- 配置
- win10 快速搭建 lnmp+swoole 环境 ,部署laravel6 与 swoole框架laravel-s项目1
- win10 快速搭建 lnmp+swoole 环境 ,部署laravel6 与 swoole框架laravel-s项目2
- docker 容器重命名
- Linux docker常用命令
- 使用
- docker 搭建php 开发环境 添加扩展redis、swoole、xdebug
- docker 单机部署redis集群
- Docker 退出容器不停止容器运行 并重新进入正在运行的容器
- 进入退出docker容器
- Docker的容器设置随Docker的启动而启动
- 使用异常处理
- docker容器中bash: vi: command not found
- OCI runtime exec failed: exec failed:解决方法
- docker启动容器慢,很慢,特别慢的坑
- 解决windows docker开发thinkphp6启动慢的问题
- 【Windows Docker】docker挂载解决IO速度慢的问题
- Docker的网络配置,导致Docker使用网路很慢的问题及解决办法
- golang工程部署到docker容器
- Docker 容器设置自启动
- 如何优雅地删除Docker镜像和容器(超详细)
- 5 个好用的 Docker 图形化管理工具
- Docker 可能会用到的命令
- Kubernetes
- 消息队列
- RabbitMQ
- php7.3安装使用rabbitMq
- Windows环境PHP如何使用RabbitMQ
- RabbitMQ学习笔记:4369、5672、15672、25672默认端口号修改
- Window10 系统 RabbitMQ的安装和简单使用
- RabbitMQ默认端口
- RabbitMQ可视化界面登录不了解决方案
- RocketMQ
- Kafka
- ActiveMQ
- mqtt
- phpMQTT详解以及处理使用过程中内存耗死问题
- MQTT--物联网(IoT)消息推送协议
- php实现mqtt发布/发送 消息到主题
- Mqtt.js 的WSS链接
- emqx
- 如何在 PHP 项目中使用 MQTT
- emqx 修改dashboard 密码
- 其他
- Windows 系统中单机最大TCP的连接数详解
- EMQX
- Linux系统EMQX设置开机自启
- Centos7 EMQX部署
- docker安装 EMQX 免费版 docker安装并配置持久化到服务器
- 实时数仓
- 网易云音乐基于 Flink + Kafka 的实时数仓建设实践
- 实时数仓-基于Flink1.11的SQL构建实时数仓探索实践
- 安全
- 网站如何保护用户的密码
- 关于web项目sessionID欺骗的问题
- php的sessionid可以伪造,不要用来做防刷新处理了
- DVWA-Weak Session IDs (弱会话)漏洞利用方式
- 保证接口数据安全的10种方案
- cookie和session的窃取
- 万能密码漏洞
- 黑客如何快速查找网站后台地址方法整理
- 网站后台万能密码/10大常用弱口令
- 万能密码漏洞02
- 大多数网站后台管理的几个常见的安全问题注意防范
- token可以被窃取吗_盗取token
- token被劫持[token被劫持如何保证接口安全性]
- PHP给后台管理系统加安全防护机制的一些方案
- php - 重新生成 session ID
- 隐藏响应中的server和X-Powered-By
- PHP会话控制之如何正确设置session_name
- Session攻击001
- PHP防SQL注入代码,PHP 预防CSRF、XSS、SQL注入攻击
- php25个安全实践
- php架构师 系统管理员必须知道的PHP安全实践
- 版本控制
- Linux服务器关联Git,通过执行更新脚本实现代码同步
- PHP通过exec执行git pull
- git 在linux部署并从windows上提交代码到linux
- git上传到linux服务器,git一键部署代码到远程服务器(linux)
- linux更新git命令,使用Linux定时脚本更新服务器的git代码
- git異常
- 如何解决remote: The project you were looking for could not be found
- git status显示大量文件修改的原因是什么
- PHPstorm批量修改文件换行符CRLF为LF
- git使用
- git常用命令大全
- centos git保存账户密码
- GIT 常用命令
- git怎样还原修改
- Git 如何放弃所有本地修改的方法
- Git忽略文件模式改变
- git: 放弃所有本地修改
- Git三种方法从远程仓库拉取指定的某一个分支
- 杂七杂八
- h5视频
- H5浏览器支持播放格式:H264 AVCA的MP4格式,不能转换为mpeg-4格式,
- iOS无法播放MP4视频文件的解决方案 mp4视频iphone播放不了怎么办
- h5点播播放mp4视频遇到的坑,ios的h5不能播放视频等
- 【Linux 并发请求数】支持多少并发请求数
- Linux下Apache服务器并发优化
- 缓存
- redis
- Linux启动PHP的多进程任务与守护redis队列
- 重启redis命令
- golang