Shell 基础 —— 正则表达式
常用正则
1 | $ grep -n "^$" test.txt # 空白行 |
在vi中按Esc键后d G可以清空光标起的所有内容。
字符截取命令
cut命令
例如我们有用户信息文件/etc/passwd
,
1 | $ useradd user1 |
假设我们要删除上面创建的用户user1和user2,当然我们可以使用userdel
命令,但是有的时候是程序执行的,所以我们需要在/etc/passwd
中提取出新创建的2个普通用户,使用grep
进行行提取
1 | $ grep "user" /etc/passwd | grep -v "system" # -v表示取反 |
接下来我们看下cut
命令进行列提取,假设有以下的csv文件(注意:分隔符号是制表符):
1 | id name gender mark |
1 | $ cut -f 2 students.csv # 截取第二列(name) |
再回到上一个从/etc/passwd
中截取用户名的程序中,我们只需要这样:
1 | $ grep "user" /etc/passwd | grep -v "system" | cut -f 1 -d ":" # -d指明分隔符 |
提取用户名和uid
1 | $ cut -d ":" -f 1,3 /etc/passwd |
1 | $ printf '%s\t%s\t%s\t%s\n' $(cat student.csv) # 使用printf输出student.csv中的内容 |
awk命令
awk '条件1{动作1}条件2{动作2}...' 文件名
- 条件(Pattern):一般使用关系表达式,例如:x>10,x>=10
- 动作(Action):格式化输出或者流程控制语句
1 | $ awk '{printf $2 "\t" $4 "\n"}' student.csv # 输出第2和4列 |
awk中$0
表示的是文件名,awk的执行是按照行进行提取,把每一个数据变换成$1,$2,$3
等字段,然后判断Pattern,条件满足则执行Action接下来是第二行,以此类推.
sed命令
文本替换和过滤的流式编辑器
1 | # sed中-n选项的作用,不加-n则不仅打印匹配的行而且打印整篇文档 |
Unix Domain Socket用于IPC(同一台主机间的进程通信),不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。UNIX Domain Socket有SOCK_DGRAM或SOCK_STREAM两种工作模式,类似于UDP和TCP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。
UNIX Domain Socket可用于两个没有亲缘关系的进程,是全双工的,是目前使用最广泛的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的。使用node可以创建Unix Domain Server
文件查找
1 | $ find /usr -name "redis.conf" |
buffer和cache
这两个术语经常被混用,原因在于他们都在内存中可以提高IO性能。但是严格来说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。