zoukankan      html  css  js  c++  java
  • Linux常用文本处理命令

    1、grep命令

    echo 'zero zo zoo' | grep 'z.*o':将匹配以'z'开头以'o'结尾的所有字符串
    echo 'zero zo zoo' | grep 'z.o':将匹配以'z'开头以'o'结尾,中间包含一个任意字符的字符串
    echo 'zero zo zoo' | grep 'zo*':将匹配以'z'开头,以任意多个'o'结尾的字符串
    echo '1234 abcd' | grep '[a-z]':grep默认是区分大小写的,这里将匹配所有的小写字母
    echo '1234 abcd' | grep '[0-9]':将匹配所有的数字
    echo '1234 abcd' | grep '[[:digit:]]':将匹配所有的数字
    echo '1234 abcd' | grep '[[:lower:]]':将匹配所有的小写字母
    echo '1234 abcd' | grep '[[:upper:]]':将匹配所有的大写字母
    echo '1234 abcd' | grep '[[:alnum:]]':将匹配所有的字母和数字,包括0-9,a-z,A-Z
    echo '1234 abcd' | grep '[[:alpha:]]':将匹配所有的字母
    echo 'geek|good' | grep '[^o]':排除字符,当^放到中括号内为排除字符,否则表示行首

    echo 'zero zo zoo' | grep -E 'zo{1}':只匹配"zo"
    echo 'zero zo zoo' | grep -E 'zo{1,}':匹配以"zo"开头的所有单词
    echo 'www.shiyanlou.com www.baidu.com www.google.com' | grep -E 'www.(shiyanlou|google).com':匹配"www.shiyanlou.com"和"www.google.com"
    echo 'www.shiyanlou.com www.baidu.com www.google.com' | grep -Ev 'www.baidu.com':或者匹配不包含"baidu"的内容

    特殊符号说明
    [:alnum:] 代表英文大小写字节及数字,亦即 0-9, A-Z, a-z
    [:alpha:] 代表任何英文大小写字节,亦即 A-Z, a-z
    [:blank:] 代表空白键与 [Tab] 按键两者
    [:cntrl:] 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
    [:digit:] 代表数字而已,亦即 0-9
    [:graph:] 除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
    [:lower:] 代表小写字节,亦即 a-z
    [:print:] 代表任何可以被列印出来的字节
    [:punct:] 代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
    [:upper:] 代表大写字节,亦即 A-Z
    [:space:] 任何会产生空白的字节,包括空白键, [Tab], CR 等等
    [:xdigit:] 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节

    2、sed命令

    sed [参数] ... [执行命令] [输入文件] ...
    sed -i '1s/sad/happy/' test:表示将test文件中第一行的'sad'替换为‘happy’

    参数说明
    -n 安静模式,只打印受影响的行,默认打印输入数据的全部内容
    -e 用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数
    -f filename 指定执行filename文件中的命令
    -r 使用扩展正则表达式,默认为标准正则表达式
    -i 将直接修改输入文件内容,而不是打印到标准输出设备

    sed执行命令格式:

    [n1][,n2]command
    [n1][~step]command
    # 其中一些命令可以在后面加上作用范围,形如:
    sed -i 's/sad/happy/g' test:g表示全局范围
    sed -i 's/sad/happy/4' test:4表示指定行中的第四个匹配字符串

    其中n1,n2表示输入内容的行号,它们之间为,逗号则表示从n1到n2行,如果为波浪号则表示从n1开始以step为步进的所有行;command为执行动作,下面为一些常用动作指令:

    命令说明
    s 行内替换
    c 整行替换
    a 插入到指定行的后面
    i 插入到指定行的前面
    p 打印指定行,通常与-n参数配合使用
    d 删除指定行

    nl passwd | sed -n '2,5p':打印2-5行
    nl passwd | sed -n '1~2p':打印奇数行
    sed -n 's/shiyanlou/hehe/gp' passwd:将输入文本中"shiyanlou" 全局替换为"hehe",并只打印替换的那一行,注意这里不能省略最后的"p"命令
    sed -n '21cwww.shiyanlou.com' passwd:删除第21行

    3、awk

    打印文本内容
    awk '{print}' test

    将test的第一行的每个字段单独显示为一行
    awk '{
    > if(NR==1){
    > print $1 " " $2 " " $3
    > } else {
    > print}
    > }' test
    awk '{
    > if(NR==1){
    > OFS=" "
    > print $1, $2, $3
    > } else {
    > print}
    > }' test

    将test的第二行的以点为分段的字段换成以空格为分隔
    awk -F'.' '{
    > if(NR==2){
    > print $1 " " $2 " " $3
    > }}' test

    awk '
    > BEGIN{
    > FS="."
    > OFS=" " # 如果写为一行,两个动作语句之间应该以";"号分开
    > }{
    > if(NR==2){
    > print $1, $2, $3
    > }}' test

    可以在print 语句中直接打印特殊符号如这里的 ,print打印的非变量内容都需要用""一对引号包围起来

    常用内置变量:

    变量名说明
    FILENAME 当前输入文件名,若有多个文件,则只表示第一个。如果输入是来自标准输入,则为空字符串
    $0 当前记录的内容
    $N N表示字段号,最大值为NF变量的值
    FS 字段分隔符,由正则表达式表示,默认为" "空格
    RS 输入记录分隔符,默认为" ",即一行为一个记录
    NF 当前记录字段数
    NR 已经读入的记录数
    FNR 当前输入文件的记录数,请注意它与NR的区别
    OFS 输出字段分隔符,默认为" "空格
    ORS 输出记录分隔符,默认为" "
  • 相关阅读:
    LeetCode链表解题模板
    c++中的new、operator new、placement new
    树的前序、中序、后续、层次遍历的递归和非递归解法
    c++Volatile关键词
    南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题
    c++右值引用以及使用
    c++选择重载函数
    从4行代码看右值引用
    被遗忘的C结构体打包技术
    南大算法设计与分析课程OJ答案代码(4)--变位词、三数之和
  • 原文地址:https://www.cnblogs.com/lianliang/p/6840065.html
Copyright © 2011-2022 走看看