• shell 字符串处理汇总(查找,替换等等)


    字符串:

    • 简称“串”。有限字符的序列。数据元素为字符的线性表,是一种数据的逻辑结构。在计算机中可有不同的存储结构。在串上可进行求子串、插入字符、删除字符、置换字符等运算。

    字符:

    • 计算机程序设计及操作时使用的符号。包括字母、数字、空格符、提示符及各种专用字符等。

    一般字符的运算包括:

    • 第一、找出字符或者字符串的类型,是数字、字母还是其他特定字符,是可打印字符,还是不可打印字符(一些控制字符)。
    • 第二、找出组成字符串的字符个数和字符串的存储结构(比如数组)。
    • 第三、对串的常规操作:求子串、插入字符、删除字符、置换字符、字符串的比较等。
    • 第四、对串的一些比较复杂而有趣的操作,这里将在最后介绍一些有趣的范例。

    1. 字符串的属性

    字符有可能是数字、字母、空格、其他特殊字符,而字符串有可能是它们任何一种或者多种的组合,在组合之后还可能形成一个具有特定意义的字符串,诸如邮件地址,URL地址等。
    概要示例: 下面我们来看看如何判断字符的类型。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    // 数字或者数字组合(能够返回结果,即程序退出状态是0,说明属于这种类型,反之不然)
    $ i=5;j=9423483247234;
    $ echo $i | grep [0-9]*
    5
    $ echo $j | grep [0-9]*
    9423483247234
    $ echo $j | grep [0-9]* >/dev/null
    $ echo $?
    0
    // 字符组合(小写字母、大写字母、两者的组合)
    $ c="A"; d="fwefewjuew"; e="fewfEFWefwefe"
    $ echo $c | grep [A-Z]
    A
    $ echo $d | grep "[a-z]*"
    fwefewjuew
    $ echo $e | grep "[a-zA-Z]*"
    fewfEFWefwefe
    // 字母和数字的组合
    $ ic="432fwfwefeFWEwefwef"
    $ echo $ic | grep "[0-9a-zA-Z]*"
    432fwfwefeFWEwefwef
    // 空格或者Tab键等
    $ echo " " | grep " "
      
    $ echo -e "\t" | grep "[[:space:]]" #[[:space:]]会同时匹配空格和TAB键
     
    $ echo -e " \t" | grep "[[:space:]]"
     
    $ echo -e "\t" | grep "<tab>" #<tab>为在键盘上按下TAB键,而不是字符<tab>
    // 匹配邮件地址
    $ echo "test2007@lzu.cn" | grep "[0-9a-zA-Z\.]*@[0-9a-zA-Z\.]"
    test2007@lzu.cn
    // 匹配URL地址(以http链接为例)
    $ echo "http://news.lzu.edu.cn/article.jsp?newsid=10135" | grep "http://[0-9a-zA-Z\./=?]*"
    http://news.lzu.edu.cn/article.jsp?newsid=10135

    说明:
    [1] /dev/null和/dev/zero是非常有趣的两个设备,它们都犹如一个黑洞,什么东西掉进去都会消失殆尽;后者则是一个能源箱,你总能从那里取到0,直到你退出。
    [2] [[:space:]]是grep用于匹配空格或者TAB键类型字符串的一种标记,其他类似的标记请查看grep的帮助,man grep。
    [3] 上面都是用grep来进行模式匹配,实际上sed, awk都可以用来做模式匹配,关于匹配中用到的正则匹配模式知识,大家可以参考正则匹配模式,更多相关资料请看参考资料。
    [4] 如果仅仅想判断字符串是否为空,即判断字符串的长度是否为零,那么可以简单的通过test命令的-z选项来判断,具体用法见test命令,man test.

    2.索引

    expr index $string $substring

    在字符串$string中所匹配到的$substring第一次所出现的位置.

    1
    2
    3
    4
    5
    6
    stringZ=abcABC123ABCabc
    echo `expr index "$stringZ" C12`             # 6
                                                # C 字符的位置.
     
    echo `expr index "$stringZ" 1c`              # 3
     # 'c' (in #3 position) matches before '1'.

    expr实例

    1、计算字串长度

    > expr length this is a test
     14

    2、抓取字串

    > expr substr this is a test 3 5
    is is

    3、抓取第一个字符数字串出现的位置

    > expr index "sarasara"  a
     2

    4、整数运算

     > expr 14 % 9
     5
     > expr 10 + 10
     20
     > expr 1000 + 900
     1900
     > expr 30 / 3 / 2
     5
     > expr 30 \* 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义)
     90
     > expr 30 * 3
     expr: Syntax error

    参考:https://www.cnblogs.com/jxterminator/p/4112565.html

  • 相关阅读:
    “百度杯”CTF比赛 九月场 code
    初识thinkphp(3)
    i春秋CTF web题(1)
    初识thinkphp(2)
    初识thinkphp(1)
    0MQ底层队列设计
    0MQ文档导读
    LF模式是个坑,ZeroIce中间件让你体会这个痛
    0xe7f001f0!?NDK调试过程,无故抛出SIGSEGV。
    KDevelop
  • 原文地址:https://www.cnblogs.com/wannuanyang/p/13386518.html
Copyright © 2020-2023  润新知