开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情
grep的一些常见case
- 统计单词中出现频率前三的末尾两个字母是什么
cat /usr/share/dict/words | tr "[:upper:]" "[:lower:]" | grep -E "^([^a]*a){3}.*$" | grep -v "'s$" | sed -E "s/.*([a-z]{2})$/\1/" | sort | uniq -c | sort | tail -n3
- 大小写转换:tr "[:upper:]" "[:lower:]"
- ^([^a]a){3}.[^'s]$:查找一个以 a 结尾的字符串三次
- grep -v "'s$":匹配结尾为’s 的结果,然后取反
- 共存在多少种词尾两字母组合
cat /usr/share/dict/words | tr "[:upper:]" "[:lower:]" | grep -E "^([^a]*a){3}.*$" | grep -v "'s$" | sed -E "s/.*([a-z]{2})$/\1/" | sort | uniq | wc -l
- 哪个组合从未出现过
为了得到没出现的组合,首先我们要生成一个包含全部组合的列表,然后再使用上面得到的出现的组合,比较二者不同即可
#!/bin/bash
for i in {a..z};do
for j in {a..z};do
echo "$i$j"
done
done
./all.sh > all.txt
cat /usr/share/dict/words | tr "[:upper:]" "[:lower:]" | grep -E "^([^a]*a){3}.*$" | grep -v "'s$" | sed -E "s/.*([a-z]{2})$/\1/" | sort | uniq > occurance.txt
diff --unchanged-group-format='' <(cat occurance.txt) <(cat all.txt) | wc -l
--unchanged-group-format=''用于将两个文件中相同的内容设置为空字符串,剩下的内容就是差异的部分
- 获取终端下常用的10条命令
history | awk '{$1="";print substr($0,2)}' | sort | uniq -c | sort -n | tail -n 10
通过 SSH 复制文件
使用 ssh 复制文件有很多方法:
ssh+tee, 最简单的方法是执行ssh命令,然后通过这样的方法利用标准输入实现cat localfile | ssh remote_server tee serverfile。回忆一下,tee命令会将标准输出写入到一个文件;scp:当需要拷贝大量的文件或目录时,使用scp命令则更加方便,因为它可以方便的遍历相关路径。语法如下:scp path/to/local_file remote_host:path/to/remote_file;rsync对scp进行了改进,它可以检测本地和远端的文件以防止重复拷贝。它还可以提供一些诸如符号连接、权限管理等精心打磨的功能。甚至还可以基于--partial标记实现断点续传。rsync的语法和scp类似;