shell 字符(串)处理命令

1. find   查找符合查找条件的文件
find pathname -options [-print -exec -ok …]
--options:
-perm :文件查找权限,后加数字
-type :文件类型,后加f:文件  d:目录   l:符号连接文件
-group : 查找属于group指定用户组的文件

-exec :后面跟的是command命令
command命令的终止,使用 分号“;”来肯定,在后面必须有一个';'
{},使用{}来表示文件名,也就是find前面处理过程当中过滤出来的文件,用于command命令进行处理,可是对于不一样的系统直接使用分号可能会有不一样的意义,使用转移符'\' 在分号前明确说明。  
-ok :后面跟的是command命令,与-exec不一样的是每次执行command 都须要用户确认是否执行。
Example:(1).列出文件名中含有root字符的文件
        find / -type f -name “*root*” -exec ls -l {} \;
2. tr 过滤器tr用来转换来自标准输入的字符。
tr [OPTION]... SET1 [SET2]
    1',把passwd中的全部小写字符转换成小写字符
    tr [a-z] [A-Z] < /etc/passwd
--options
-s : 删除全部与SET1重复的字符,只保留第一个。
    2',除去重复的e
    tr -s 'e'  <test4.txt
    tr -s 'e' 'f'  <test4.txt 把e转换成f并把重复的f除去
-d : 删除SET1同样的字符
    3',删除passwd中的':'
    tr -d ':'  /etc/passwd
3. sort 按字典序排序
4. uniq 去除重复
5. cut 字符串截取

  cut OPTION... [FILE]…
  --options
-c:以字符为单位取出指定位置的字符
-d:指定分隔符分割字符串 与-f一块儿使用
-b:以字节为单位取出指定位置的字符
-f:依据 -d 的分隔字元将一段讯息分割成为数段,用 -f 取出第几段的意思
  cut -d ':' -f1 /etc/passwd
 对文件/etc/passwd 的每一行以 : 为分割符,取出第一段
6. sed 过滤和转换文本的流编辑器
sed [OPTION]... {script-only-if-no-other-script} [input-file]…
sed [options] 'command' file(s)
--option
  -n  --quiet,--silent
  -e command,--expression=command
git

  -i  直接在原文件上修改,而不是输出到stdout,不然其它的处理都输出到stdout正则表达式

 --command(相似vim中的command)
  1'.d 删除指定的范围的内容
    $sed '2d'  bashrc      删除bashrc文件的第二行
    $sed '2,$d' bashrc     删除bashrc文件的2到最后一行
    $sed '/#/d' bashrc     删除bashrc文件中包含#的行
  2'.s 替换命令
    $sed 's/#/$/' bashrc   把bashrc文件每一行中的第一个#替换成$
  3'.p 打印命令
    $sed -n '2,5p' bashrc     把bashrc文件的2到5行打印出来
  4'.e 多点编辑(能够多个命令一块儿用)
    $ -n -e 's/#/$/' -e '2,5p' bashrc  把bashrc文件每一行中的第一个#替换成$,并把2,到    5行打印出来
  5'.a\ 追加命令
    $sed '/^#/a\This is append' bashrc 在bashrc文件的每一行行首是#的行的下一行添加    This is append
  6'.i\ 插入命令
    $sed '/^#/i\This is append' bashrc 在bashrc文件的每一行行首是#的行的前一行添加    This is append
  7'. w 写入文件命令
    $sed '/^#/w filename'  bashrc   把bashrc中的每一行行首为#的行写入文件filename中
  8'. r读入文件
    $sed '/^#/r filename' bashrc    把filenmae的内容写入到 bashrc文件中的行首是#的行的后面
express

7.awkvim

    主要用于解析文本
bash

8. grep
grep [OPTIONS] PATTERN [FILE...]
--OPTIONS:
     -i :忽略大小写
     --color
     -v :显示没有匹配的选项
     -o :只显示匹配的字符串
     -r :递归的搜索匹配
--PATTERN: 正则表达式 regular expression(RE)
 []:匹配指定范围内的任意单个字符
 [^ ]:匹配不在指定范围内的任意单个字符
字符集:
[:digit:]  [:space:] [:upper:] [:lower:] [:alpha:] [:alnum:]
'[[:digit:]][[:space:]]' 表示匹配一个数字后加一个空格
元字符:
  (1).'.':匹配任意单个字符
  (2).'*':匹配其前面的字符任意次
  (3).'\?':匹配其前面的字符0或1次
  (4).'\{n,m\}':匹配其前面的字符n到m次
位置:
  (1). '^':此字符后面的字符必须出如今行首
  (2). '$':此字符前面的字符必须出如今行尾         ^$空白行
  (3). '\<或\b':此字符后面的字符必须做为单词首部出现
  (4). '\>或\b':此字符前面的字符必须做为单词尾部出现

分组:
  (1).'\(\)':后向引用
          \1:第一个左括号以及对应的右括号匹配的字符
         \2:第二个左括号以及对应的右括号匹配的字符
        \3:第三个左括号以及对应的右括号匹配的字符
   example:
        test.txt:
      He love his lover
      He love his liker
      He like his lover
      He like his liker

    $grep '\(l..e\).*\1' test.txt
    匹配:
       He love his lover
       He like his liker

(l..e)被做为一个组看待,它是一个组,它的名称是1,而后 .*表示 以后的任意个字符,【\1】指代的是前面用括号括起来的l..e。
--扩展
 egrep
 fgrep: fast grep,不支持正则表达式
 sed,awk支持正则表达式
9. file globbing (文件通配符)
bash自己没有正则表达式的功能,bash所作的是展开文件名扩展,就是所谓的通配(globbing).
不是使用标准的正则表达式,而是使用通配符。通配解释标准的通配符:
(1), *匹配任意多个字符,    除了”.”
(2), ?匹配一个字符,    除了”.”
(3), []匹配方括号中的任意一个字符,除了”.”
(4), 通配机制中的通配符和元字符不会扩展点文件
PS:Bash 会对命令行中没有引号引发来的字符尝试文件名扩展
app

相关文章
相关标签/搜索