grep ‘[0-9]\{3\}’ # or grep -E ‘[0-9]{3}’ # or grep -P ‘\d{3}’
查找 IP 地址
1 2 3
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' # or grep -Po '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
查找单词
1 2 3 4 5 6 7 8
# return also 3 lines after match grep -A 3 'bbo'
# return also 3 lines before match grep -B 3 'bbo'
# return also 3 lines before and after match grep -C 3 'bbo'
查找特定字符开头的单词
1
grep -o 'S.*'
提取两个特定单词之间的文本
1
grep -o -P '(?<=w1).*(?=w2)'
查找不包含某个单词的文件内容
1
grep -v bbo filename
查找不是以特定字符开头的文件内容
1
grep -v '^#' file.txt
查找含有空格的内容
1 2
bbo="some strings" grep "$boo" filename
查找第一个 match 文件内容
1
grep -m 1 bbo filename
查找并返回满足条件的文件内容条数
1
grep -c bbo filename
统计单词在文件中出现的次数
1
grep -o bbo filename |wc -l
大小写敏感的查找
1
grep -i "bbo" filename
匹配结果着色
1
grep --color bbo filename
查找目录下的所有文件
1 2 3
grep -R bbo /path/to/directory # or grep -r bbo /path/to/directory
查找目录下的所有文件,不输出文件内容
1
grep -rh bbo /path/to/directory
查找目录下的所有文件,只输出匹配的文件名
1
grep -rl bbo /path/to/directory
OR 查找
1
grep 'A\|B\|C\|D'
AND 查找(比如 A and B)
1
grep 'A.*B'
正则查找(比如 ACB 或者 AEB)
1
grep 'A.B'
查找特定字符(比如 color 或者 colour)
1
grep ‘colou?r’
查找多个文件的所有内容
1
grep -f fileA fileB
查找 tab
1
grep $'\t'
从变量中查找
1 2 3 4
$echo "$long_str"|grep -q "$short_str" if [ $? -eq 0 ]; then echo 'found'; fi #grep -q will output 0 if match found #remember to add space between []!
查找括号中间的字符串
1
grep -oP '\(\K[^\)]+'
略过目录查找
1
grep -d skip 'bbo' /path/to/files/*
3. Sed
移除文件第一行
1
sed 1d filename
移除文件的前 100 行
1
sed 1,100d filename
移除包含特定字符串的文件行
注:这种方式并不会修改原文件,可以将输出重定向到新的文件保存
1 2 3
sed "/bbo/d" filename # case insensitive: sed "/bbo/Id" filename
移除文件不满足第 n 个字符串不等于某个值的行
1 2 3 4
# 第 5 个字符不等于 2 sed -E '/^.{5}[^2]/d' #aaaa2aaa (you can stay) #aaaa1aaa (delete!)
修改原文件
1 2
# 删除包含 bbo 的行并直接保存文件 sed -i "/bbo/d" filename
使用变量的时候使用双引号
1 2 3 4
# e.g. add >$i to the first line (to make a bioinformatics FASTA file) sed "1i >$i" # notice the double quotes! in other examples, you can use a single quote, but here, no way! # '1i' means insert to first line
删除空行
1 2 3 4 5
sed '/^\s*$/d'
# or
sed '/^$/d'
删除最后一行
1
sed '$d'
删除文件的最后一个字符
1
sed -i '$ s/.$//' filename
向文件开头插入字符串(比如 “[“)
1
sed -i '1s/^/[/' file
向文件中特定行中插入字符串
1
sed -e '1isomething' -e '3isomething'
向文件结尾插入字符(比如 “]”)
1
sed '$s/$/]/' filename
向文件结尾插入新行
1
sed '$a\'
向文件的每一行插入数据
1
sed -e 's/^/bbo/' file
向文件的每一行结尾插入数据
1
sed -e 's/$/\}\]/' filename
每 n 个字符插入换行符(比如每 4 个字符)
1
sed 's/.\{4\}/&\n/g'
连接多个文件
1
sed -s '$a,' *.json > all.json
内容替换
1
sed 's/A/B/g' filename
基于正则的文件内容替换
1
sed "s/aaa=.*/aaa=\/my\/new\/path/g"
筛选文件中以特定字符串开始行
1
sed -n '/^@S/p'
####打印文件中的多行
1
sed -n 500,5000p filename
打印文件中特定行
1 2 3
sed -n '0~3p' filename
# 打印 3 的倍数行
打印奇数行
1
sed -n '1~2p' filename
删除文件开头的空格和 tab
1 2
sed -e 's/^[ \t]*//' # Notice a whitespace before '\t'!!
只删除空格
1 2 3
sed 's/ *//'
# notice a whitespace before '*'!!
移除文件结尾的逗号
1
sed 's/,$//g'
文件结尾添加一列(以 tab 分隔)
1 2 3 4 5
sed "s/$/\t$i/" # $i is the valuable you want to add
# To add the filename to every last column of the file for i in $(ls);do sed -i "s/$/\t$i/" $i;done
# For example there are two files: # fileA: # a # b # c # fileB: # d # e awk 'print FILENAME, NR,FNR,$0}' fileA fileB # fileA 1 1 a # fileA 2 2 b # fileA 3 3 c # fileB 4 1 d # fileB 5 2 e
5. Xargs
设置 tab 为分隔符
1
xargs -d\t
每行显示三个元素
1 2 3
echo 1 2 3 4 5 6| xargs -n 3 # 1 2 3 # 4 5 6
执行之前先询问
1 2 3
$ echo a b c |xargs -p -n 3 $ echo a b c ?... #输入 y $ a b c