Last active
December 12, 2015 07:48
LinuxTips历史发布归档
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
###### | |
# 本归档每周末收录当周的Tips | |
###### | |
# 以root身份执行上一条命令 | |
$ sudo!! | |
# 返回用户主目录 | |
$ cd | |
# 返回前一次所在目录 | |
$ cd - | |
# Python自带的简易httpserver,可以serve当前目录。方便多平台的文件分享。 | |
$ python -m SimpleHTTPServer | |
# 清空文件内容 | |
$ > file.txt | |
# 快速在终端查看ASCII码表 | |
$ man ascii | |
# 获取本机的外网IP,该命令需要联网。感谢 http://ifconfig.me/ | |
$ curl ifconfig.me | |
# 剪切从光标到行首/粘贴上一次剪切的内容 | |
Ctrl + u/y | |
# 移动光标到行首/行尾/前(右)一位/前(左)一位 | |
Ctrl + a/e/f/b | |
# 搜索历史命令 | |
Ctrl + r | |
# 查看所有监听的端口,以及相关的进程id和名字 | |
$ sudo netstat -tlnp | |
# 当需要在终端输入较长文本的时候, | |
# 可以调出环境变量中$EDITOR中指定的编辑器进行编辑, | |
# 保存并关闭编辑器后文本内容则会传给终端执行 | |
Ctrl-x e (同时摁下) | |
# 清空终端 | |
Ctrl + l | |
# 随机生成16位的字符串,可以作为密码 | |
$ cat /dev/urandom | base64 | head -c 16 | |
# 在当前目录及其子目录的所有.py文件中搜索含有TODO的行 | |
$ find . -name '*.py' | xargs grep -r 'TODO' | |
# 快捷查看内核/操作系统/CPU信息 | |
$ uname -a | |
# 显示系统最后重启的历史记录 | |
$ last reboot | |
# 某任务前后台执行切换 | |
$ ping www.kantuban.com # Ctrl + z后台运行上述命令 | |
$ fg # 把后台运行的命令调出到前台 | |
$ jobs -l # 查看后台进程列表 | |
# 查看硬件设备信息 | |
$ dmesg | |
# 查看文件行数 | |
$ cat test.txt | wc -l | |
# 递归移除指定目录中的pyc文件: | |
$ find target_dir -name '*.pyc' | xargs rm -vf | |
# 打印file.txt的前7行 | |
$ sed 7q file.txt | |
# ^find^replace技巧:把前一次命令中的find替换为replace执行,比如下面我们要重启mysqld这个服务: | |
# 关闭服务mysqld | |
$ /etc/init.d/mysqld stop | |
# 启动服务mysqld | |
$ ^stop^start | |
# 我们都知道用 cat 可以查看文件内容,其实cat还有个参数-v可以查看文件中的不可见字符: | |
$ cat -v file.txt | |
############ | |
# AWK 系列 # | |
############ | |
# 示例文件 | |
$ cat file.txt | |
id name | |
1 China | |
2 Japan | |
3 Korea | |
# awk - 1: 打印指定列 | |
$ awk '{print $1}' file.txt | |
id | |
1 | |
2 | |
3 | |
# 'NR!=1'表示花括号里的操作对象排除第一行 | |
$ awk 'NR!=1{print $1}' file.txt | |
1 | |
2 | |
3 | |
# 示例文件 | |
$ cat file.txt | |
id,name | |
1,China | |
2,Japan | |
3,Korea | |
# awk - 3: awk默认的分隔符是空格,可以使用-F参数来指定分隔符 | |
$ awk -F "," '{print $1}' file.txt | |
id | |
1 | |
2 | |
3 | |
# awk - 4: 给awk程序传变量,有2种方法。 | |
# 方法1 - 用 -v 参数传入 | |
$ awk -v val=1 -F, '{print $1 ">" val}' file.txt | |
id>1 | |
1>1 | |
2>1 | |
3>1 | |
# 方法2 - 在文件名前以k=v关键字参数的形式传入 | |
$ awk -v '{print $1">"val}' val=1 file.txt | |
id>1 | |
1>1 | |
2>1 | |
3>1 | |
# awk - 5: 利用awk做文件内容匹配 | |
$ cat file.txt | |
id,name | |
1,China | |
2,Japan | |
3,Korea | |
#### (1) 在file.txt中匹配含有'na'的行 | |
# $0: 匹配范围为所有列。$0表示所有列,$1表示第一列,以此类推。 | |
# ~ :表示模糊匹配,按照‘/正则表达式/’进行匹配。 | |
# print:表示打印整行,其实是省略了$0。如果想打印第一列可以写成 {print $1}。 | |
$ awk '$0 ~ /na/{print}' file.txt | |
id,name | |
1,China | |
$ awk -F , '$2 ~ /na/{print $2}' file.txt | |
name | |
China | |
# 由于awk默认打印整行,默认正则匹配,且默认匹配范围是所有列,所以也可以简写为: | |
$ awk /na/ file.txt | |
id,name | |
1,China | |
#### (2) 精准匹配,注意用'=='取代了'~' | |
$ awk -F , '$2 == "China" {print $2}' file.txt | |
China | |
#### awk - 6: 组合条件匹配:并,或,否 | |
$ cat file.txt | |
id,name | |
1,China | |
2,Chinaaaa | |
3,Japan | |
4,Korea | |
# (1) 并:&& | |
$ awk -F , '$2 ~ /na/ && $1 > 1 {print}' file.txt | |
id,name # 字母大于数字,所以此行会被匹配出来 | |
2,Chinaaaa | |
# (2) 或:|| | |
$ awk -F , '$2 ~ /Ja/ || $1 == 4 {print}' file.txt | |
3,Japan | |
4,Korea | |
# (3) 否:!~,!= | |
$ awk -F , '$1 !~ 2 {print}' file.txt | |
id,name | |
1,China | |
3,Japan | |
4,Korea | |
#### awk - 7:列求和 | |
$ cat file.txt | |
1,China | |
2,Chinaaaa | |
3,Japan | |
4,Korea | |
# 第一列求和,即1 + 2 + 3 + 4 | |
# x+=$1表示:x = 0; x = x + $1 | |
# END表示循环到文件尾 | |
$ awk -F , '{x+=$1}END{print x}' file.txt | |
10 | |
# awk - 8 利用awk进行分组求和 | |
$ cat file.txt | |
Item1,200 | |
Item2,500 | |
Item3,900 | |
Item2,800 | |
Item1,600 | |
# 分别求Item1, Item2, Item3的和 | |
# a[$1]类似JavaScript中的hash,Python中的dict,以$1为key, $2的累积为value | |
$ awk -F , '{a[$1] += $2}END{for(i in a) print i "," a[i]}' file.txt | |
Item1,800 | |
Item2,1300 | |
Item3,900 | |
# awk - 9 插入列 | |
$ cat file.txt | |
Item1,200 | |
Item2,500 | |
Item3,900 | |
Item2,800 | |
Item1,600 | |
# 在第一列前面插入一列 | |
$ awk -F , '{$1=++i FS $1;}1' OFS=, file.txt | |
1,Item1,200 | |
2,Item2,500 | |
3,Item3,900 | |
4,Item2,800 | |
5,Item1,600 | |
# 在最后一列后面插入一列 | |
awk -F , '{$(NF+1)=++i;}1' OFS=, file.txt | |
Item1,200,1 | |
Item2,500,2 | |
Item3,900,3 | |
Item2,800,4 | |
Item1,600,5 | |
# 在最后一列前面插入一列 | |
$ awk -F , '{$NF=++i FS $NF;}1' OFS=, file.txt | |
Item1,1,200 | |
Item2,2,500 | |
Item3,3,900 | |
Item2,4,800 | |
Item1,5,600 | |
## awk - 10 更新列 | |
$ cat file.txt | |
Item1,200 | |
Item2,500 | |
Item3,900 | |
Item2,800 | |
Item1,600 | |
# 第二列加1000 | |
$ awk -F , '{$2+=1000}'1 OFS=, file.txt | |
Item1,1200 | |
Item2,1500 | |
Item3,1900 | |
Item2,1800 | |
Item1,1600 | |
# 将第一列转为大写字母 | |
$ awk -F , '{$1=toupper($1)}'1 OFS=, file.txt | |
ITEM1,200 | |
ITEM2,500 | |
ITEM3,900 | |
ITEM2,800 | |
ITEM1,600 | |
## awk - 11 按照某一列来分组拆分到多个文件 | |
$ cat file.txt | |
Item1,200 | |
Item2,500 | |
Item3,900 | |
Item2,800 | |
Item1,600 | |
# 拆分成Item1, Item2, Item3三个文件 | |
$ awk -F , '{print > $1}' file.txt | |
$ cat Item1 | |
Item1,200 | |
Item1,600 | |
$ cat Item2 | |
Item2,500 | |
Item2,800 | |
$ cat Item3 | |
Item3,900 | |
############### | |
# SED 系列 # | |
############### | |
### sed - 1:插入行 | |
$ cat file.txt | |
Hilesh, 1001 | |
Bharti, 1002 | |
Aparna, 1003 | |
Harshal, 1004 | |
Keyur, 1005 | |
# 在第一行之前插入一行'----------' | |
# 操作符 i : insert 或 include 的简写。 | |
$ sed '1i ------------' file.txt | |
------------ | |
Hilesh, 1001 | |
Bharti, 1002 | |
Aparna, 1003 | |
Harshal, 1004 | |
Keyur, 1005 | |
# 在最后一行之后插入一行‘-----------’ | |
# 操作符 a : after的简写 | |
$ sed '$a ------------' file.txt | |
Hilesh, 1001 | |
Bharti, 1002 | |
Aparna, 1003 | |
Harshal, 1004 | |
Keyur, 1005 | |
------------ | |
### sed - 2:在指定行前或后插入行 | |
$ cat file.txt | |
Hilesh, 1001 | |
Bharti, 1002 | |
Aparna, 1003 | |
Harshal, 1004 | |
Keyur, 1005 | |
# 在Aparna所在行的下一行插入一行'Linuxtips, 2013' | |
$ sed '/Aparna/a Linuxtips, 2013' file.txt | |
Hilesh, 1001 | |
Bharti, 1002 | |
Aparna, 1003 | |
Linuxtips, 2013 | |
Harshal, 1004 | |
Keyur, 1005 | |
# 在Aparna所在行的前一行插入一行'Linuxtips, 2013' | |
$ sed '/Aparna/i Linuxtips, 2013' file.txt | |
Hilesh, 1001 | |
Bharti, 1002 | |
Linuxtips, 2013 | |
Aparna, 1003 | |
Harshal, 1004 | |
Keyur, 1005 | |
### sed - 3:字符串替换之二 | |
$ cat file.txt | |
apple | |
orange | |
banana | |
pappaya | |
# 替换第3行的a为A | |
$ sed '3s/a/A/g' file.txt | |
apple | |
orange | |
bAnAnA | |
pappaya | |
# 替换第1行到第3行的a为A | |
$ sed '1, 3s/a/A/g' file.txt | |
Apple | |
orAnge | |
bAnAnA | |
pappaya | |
### sed - 4:字符串替换之三:多次替换 | |
$ cat file.txt | |
apple | |
orange | |
banana | |
pappaya | |
# 把所有a替换为A,p替换成P | |
$ sed 's/a/A/g; s/p/P/g' file.txt | |
APPle | |
orAnge | |
bAnAnA | |
PAPPAyA | |
# 也可以写成这样 | |
$ sed -e 's/a/A/g' -e 's/p/P/g' file.txt | |
APPle | |
orAnge | |
bAnAnA | |
PAPPAyA | |
### sed - 5:文件拼接 | |
$ cat file1.txt | |
1apple | |
1banana | |
1mango | |
$ cat file2.txt | |
2orange | |
2strawberry | |
# 将file2.txt插入file1.txt每一行之间 | |
# r - read | |
$ sed 'r file2.txt' file1.txt | |
1apple | |
2orange | |
2strawberry | |
1banana | |
2orange | |
2strawberry | |
1mango | |
2orange | |
2strawberry | |
# 将file2.txt插在file1.txt的第一行之后 | |
$ sed '1r file2.txt' file1.txt | |
1apple | |
2orange | |
2strawberry | |
1banana | |
1mango | |
# 将file2.txt插在file1.txt中含有banana的那行之后 | |
$ sed '/banana/r file2.txt' file1.txt | |
1apple | |
1banana | |
2orange | |
2strawberry | |
1mango | |
### sed - 6:删除行 | |
$ cat file.txt | |
apple | |
orange | |
banana | |
pappaya | |
# 删除第一行 | |
$ sed '1d' file.txt | |
orange | |
banana | |
pappaya | |
# 删除最后一行 | |
$ sed '$d' file.txt | |
apple | |
orange | |
banana | |
# 删除1至3行 | |
$ sed '1,3d' file.txt | |
pappaya | |
############### | |
# 网页存档页: | |
# https://gist.github.com/dlutcat/4739126 | |
############### |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment