关于linux 的问题
我用grep 过滤出一些内容但是,他总是输出整行,有没有什么方法,可以直接只输出我正则匹配到的内容,其他内容不要
如下只输出红色部分,其他丢掉,不要太过复杂的awk {print $} 这种,想要快速直接输出匹配到的内容
使用 -o 选项就只输出匹配到的内容:grep -o "xxx"
如果是正则表达式匹配,可以和E写在一起:grep -oE "xxreg"
find 和 grep 命令异同
find 命令:主要用于查找文件
grep 命令:主要用来在某个文件中查找具体文字内容 ,
find /PATH -name "*.h"
# 查找所有".h"文件中的含有"helloworld"字符串的文件
find /PATH -name "*.h" -exec grep -in "helloworld" {} \;
find /PATH -name "*.h" | xargs grep -in "helloworld"
#查找所有".h"和".c"文件中的含有"helloworld"字符串的文件
find /PATH /( -name "*.h" -or -name "*.c" /) -exec grep -in "helloworld" {} \;
注:/PATH为查找路径,默认为当前路径。带-exec参数时必须以;结尾,否则会提示“find: 遗漏“-exec”的参数”。
Linux 三剑客 grep / sed / awk
grep: 强大的文本’搜索’工具
grep [OPTIONS] PATTERN [FILE...]
grep -n 'word' file_name
sed:实现数据的替换,删除,增加,选取等(以行为单位进行处理)
sed [option] 'script' inputfile
#删除file_name文件的2到4行
sed '2,4d' file_name
awk: 以字段为单位进行处理(其实就是把一行的数据分割,然后进行处理)
awk [options] 'program' file…
#把file_name 文件中的前五行的第一列,第二列的数据列出来 (以[tab]或空格键分隔)
awk 'NR<6{print $1 "\t" $2 }' file_name