linux(十)字符转换

作者: alonwang | 来源:发表于2016-09-09 22:13 被阅读53次

    tr

    删除一段信息中的文字,进行文字信息的替换

    tr [-ds] SET1

    • -d : 删除信息中SET1这个字符串
    • -s : 取代掉重复的字符。

    eg

    last | tr '[a-z]' '[A-Z]'
    

    将小写字符转换为大写字符

    cat /etc/passwd | tr -d ':'
    

    删除 `:`

    unix2dos filename 
    

    转换文件换行方式为window类型
    dos2unix filename
    转换文件换行方式为unix类型

    col

    处理特殊字符

    col [-xb]

    • -x : 将tab转换成对等的空白键

    eg

    cat -A /etc/passwd | col -x
    

    将[tab]表示为对等的空白键而不是`^l`

    join

    处理两个文件中有相同数据的那一行

    join [-ti12] file1 file2

    • -t : join默认以空白字符分隔数据,并且对比第一个字段的数据,
      如果两个文件相同,则将两笔数据联成一行,且第一个字段放在第一个.

    • -i : 忽略大小写差异

    • -1 : 数字1,代表"第一个文件要用那个字段来分析"的意思

    • -i : 代表"第二个文件要用那个字段来分析"的意思

    eg

    join -t ':' /etc/passwd /etc/shadow | head -n 3
    

    因为两个文件的开头都是root,并且以:作为分隔符,这样两个文件的第一行就放在一起了
    就像这样

      root:x:0:0:root:/root:/bin/zsh:$6$V6wHgIfF$gBrafGiGZDiBDkQHFaYmojtTfjny4ReYZWXwrdx8kUWwe0GQNWwP4ee.gIRFWDD/AicEVRU3NsgOQulXPH8at.:17023:0:99999:7:::
      daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin:*:17001:0:99999:7:::
      bin:x:2:2:bin:/bin:/usr/sbin/nologin:*:17001:0:99999:7:::
    

    下面给出一个稍微复杂一点的示例

    head -n 3 /etc/passwd /etc/group
    

    输出如下

    root:x:0:0:root:/root:/bin/zsh
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    
    ==> /etc/group <==
    root:x:0:
    daemon:x:1:
    bin:x:2:
    

    可以看出,/etc/passwd 的GID在第四项,/etc/group的在第三项,怎么把他们结合起来呢.

    join -t  ':' -1 4 /etc/passwd -2 3 /etc/group | head -n 3
    

    输出是这样的

    0:root:x:0:root:/root:/bin/zsh:root:x:
    1:daemon:x:1:daemon:/usr/sbin:/usr/sbin/nologin:daemon:x:
    2:bin:x:2:bin:/bin:/usr/sbin/nologin:bin:x:
    

    past

    join的简化版,直接将两行贴在一一起,以tab隔开

    past [-d] file1 file2

    • -d : 后接分隔字符.默认以tab分隔
      • : 如果file部分写成-,代表标准输入的数据

    eg

    先用cat读出/etc/group,再将 /etc/group /etc/shadow 和标准输入贴在一起,只取出前三行
    cat /etc/group | paste /etc/group /etc/shadow - | head -n 3

    expand

    用来将[tab]转换为空白键

    expand [-t] file

    • -t : 后面接数字,代表一个[tab]用多少空白字符表示

    split

    大文件分割成小文件

    split [-bl] file PREFIX

    • -b : 后接欲分区成的文件大小,可加单位,b,k,m...
    • -l : 以行数进行分区

    eg

    将service 分割成300kb大小

    split -b 300k /etc/services services
    

    将分割好的文件命名为servicesaa servicesab....的形式

    将分割文件合并(并不限于此)

    cat services* >> servicesback
    

    xargs

    用来将标准输入切割成参数并转发给需要的命令

    xargs [-0epn] command

    • -0 : 如果stdin有特殊字符,还原它们
    • -e : eof,后接表示终止的字符(串)
    • -p : 执行每个指令的argument都会询问使用者
    • -n : 后接次数,表示一次使用几个参数

    eg

    取出/etc/passwd的第一项,取三行并且使用id命令查询

    cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 id
    

    • CRLF : 回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。

    • 这两个ACSII字符不会在屏幕有任何输出,但在Windows中广泛使用来标识一行的结束。而在Linux/UNIX系统中只有换行符。

    • 如果有时候需要stdin或stdout,可以用-代替

    • 本章介绍的管线命令主要有:cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand,
      split, xargs 等。

    相关文章

      网友评论

        本文标题:linux(十)字符转换

        本文链接:https://www.haomeiwen.com/subject/hoqyettx.html