Linux学习笔记----基础部分-----3,文本处理(find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk)

自我总结 + 优秀摘录

本节将介绍Linux下使用Shell处理文本时最常用的工具: find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk。

1,find文件查找

查找txt和pdf文件 find .\(-name ".txt" -o -name "*.pdf"\) -print
正则方式 find . -regex ".*\(\.txt|.pdf\)$"    -iregex: 忽略大小写的正则
否定参数 ,查找所有非txt find . ! -name "*.txt" -print
置顶搜索深度 find . -maxdepth 1 -type f
按类型搜索 find . -type d -print
删除当前目录下所有的swp文件 find . -type f -name "*.swp" -delete
将当前目录下的所有权变更为weber find . -type f -user root -exec chown weber {}\; //}是一个特殊的字符串,对于每一个匹配的文件,{}会被替换成相应的文件名

2,grep文本搜索

grep match_patten file // 默认访问匹配行

常用参数

  • -o 只输出匹配的文本行 VS -v 只输出没有匹配的文本行
  • -c 统计文件中包含文本的次数

    grep -c “text” filename

  • -n 打印匹配的行号
  • -i 搜索时忽略大小写
  • -l 只打印文件名

3,xargs命令行参数转换

xargs 能够将输入数据转化为特定命令的命令行参数;这样,可以配合很多命令来组合使用。比如grep,比如find; - 将多行输出转化为单行输出

cat file.txt| xargs

n 是多行文本间的定界符

  • 将单行转化为多行输出
cat single.txt | xargs -n 3

-n:指定每行显示的字段数

xargs参数说明

  • -d 定义定界符 (默认为空格 多行的定界符为 n)
  • -n 指定输出为多行
  • -I {} 指定替换字符串,这个字符串在xargs扩展时会被替换掉,用于待执行的命令需要多个参数时
  • -0:指定0为输入定界符

示例:

cat file.txt | xargs -I {} ./command.sh -p {} -1

#统计程序行数
find source_dir/ -type f -name "*.cpp" -print0 |xargs -0 wc -l

#redis通过string存储数据,通过set存储索引,需要通过索引来查询出所有的值:
./redis-cli smembers $1  | awk '{print $1}'|xargs -I {} ./redis-cli get {}

4,sort排序

  • -n 按数字进行排序 VS -d 按字典序进行排序
  • -r 逆序排序
  • -k N 指定按第N列排序

示例:

sort -nrk 1 data.txt
sort -bd data // 忽略像空格之类的前导空白字符

5,uniq消除重复行

6,用tr进行转换

echo 12345 | tr '0-9' '9876543210' //加解密转换,替换对应字符
cat text| tr '\t' ' '  //制表符转空格

7,按列区分文本

8,paste按列拼接文本

9,wc统计行和字符的工具

        $wc -l file //统计行数                             $wc -w file //统计单词数                                $wc -c file //统计字符数 

10,sed文本替换利器

  • 首处替换
sed 's/text/replace_text/' file   //替换每一行的第一处匹配的text
  • 全局替换
sed 's/text/replace_text/g' file

默认替换后,输出替换后的内容,如果需要直接替换原文件,使用-i:

sed -i 's/text/repalce_text/g' file
  • 移除空白行
sed '/^$/d' file
  • 变量转换

已匹配的字符串通过标记&来引用.

echo this is en example | sed 's/\w+/[&]/g'
$>[this]  [is] [en] [example]
  • 子串匹配标记

第一个匹配的括号内容使用标记 1 来引用

sed 's/hello\([0-9]\)/\1/'
  • 双引号求值

sed通常用单引号来引用;也可使用双引号,使用双引号后,双引号会对表达式求值:

sed 's/$var/HLLOE/'

当使用双引号时,我们可以在sed样式和替换字符串中指定变量;

eg:
p=patten
r=replaced
echo "line con a patten" | sed "s/$p/$r/g"
$>line con a replaced
  • 其它示例

字符串插入字符:将文本中每行内容(ABCDEF) 转换为 ABC/DEF:

sed 's/^.\{3\}/&\//g' file

11,awk数据流处理工具

猜你喜欢

转载自blog.csdn.net/xiaomucgwlmx/article/details/88891591