shell 文本数据处理

这篇具有很好参考价值的文章主要介绍了shell 文本数据处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  在 linux shell 中,不同工具、程序间通过文本进行数据交互,即以文本作为输入、输出标准格式。文本成为公共的协议,使得整个 shell 成为一个开放式环境,这给文本数据的处理带来了很大的方便。

重定向

  程序的输出可通过符号 >>> 实现覆盖、追加重定向到文件。我们用 echo 命令(回显,将输入参数原样输出到控制台)和cat 命令(吐文件,将文件内容输出到控制台显示)演示重定向。

  • echo

    $ echo hello world

    hello world

  • 重定向 覆盖 到文件 test.txt

    $ echo -ne “this\nis\na\n” > test.txt

    $ cat test.txt

    this
    is
    a

  • 重定向 追加 到文件 test.txt

    $ echo -ne “test\ntext.\n” >> test.txt

    $ cat test.txt

    this
    is
    a
    test
    text.

  • 标准输出 重定向到 std.txt,标准错误 重定向到 err.txt

    $ (echo hello world && cat a) > std.txt 2> err.txt

    $ cat std.txt

    hello world

    $ cat err.txt

    cat: a: No such file or directory

  • 标准错误 重定向到 标准输出

    $ (echo hello world && cat a) > std.txt 2>&1

    $ cat std.txt

    hello world
    cat: a: No such file or directory

管道

  通过管道(使用符号 | 表示),可以把一个程序(cat)的输出,作为另一个程序(echo)的输入。

  • cat test.txt | xargs echo

    this is a test text.

grep 模式搜索

  简单的模式搜索可以使用 grep 命令来完成。

  • Usage: grep [OPTION…] PATTERNS [FILE…]

  • 常用 OPTION

    -n 显示行号
    -H 显示文件名
    -h 隐藏文件名
    -r 递归整个目录中的文件
    -o 只显示匹配的内容
    -E 使用扩展的正则表达式 PATTERN

sed 匹配替换

  • Usage: sed OPTIONS… [SCRIPT] [INPUTFILE…]

  • 常用 OPTIONS

    -i 在原文件中 in-place 执行操作
    -e 指定 SCRIPT,可以有多个,如 sed -e 'SCRIPT1' -e 'SCRIPT2' [INPUTFILE...]
    -f 从文件中加载 SCRIPT
    -r, -E 使用扩展的正则表达式
    -u 不使用缓存
    -n 取消自动输出,只输出 p 操作内容

  • [SCRIPT] 格式: [addr]X[options]

    • [addr] 用于定位需要处理的行

      [addr] 格式 用例 说明
      行号 1 1
      行 range 15,30 15 ~ 30
      正则匹配 /foo/ 包含字符串 foo 的行
      取反 1! 除第 1 行外的所有行
    • X 是操作命令,[options]X 命令的参数

      X 命令 [options] 用例 说明
      i 要插入的内容 1i before 在第1行前插入一行,内容为 before
      a 要追加的内容 1a after 在第1行后追加一行,内容为 after
      r file 1r title.txt 读取文件 title.txt 中的内容,输出到第1行后面
      w file /foo/w title.txt 将包含 foo 的行输出到文件 file.txt
      s /pattern/replace/[g] s/foo/bar/g 将所有 foo 替换为 bar,不加 g 则只替换每行中第一次出现的 foo
      z - /foo/ z 将包含 foo 的行清空,保留这个空行
      d - /foo/ d 删除包含 foo 的行
      q exit-code /foo/q 2 处理完包含 foo 的行就退出,返回错误码 2 到shell
      = - = 输出所有行的行号
    • 对匹配的行,执行多个 SCRIPT 操作

      在一条 sed 命令中,可以使用多条用 ; 间隔开的 SCRIPT,形如 sed '[a1]X1[o1]; [a2]X2[o2]; [a3]X3[o3]' [INPUTFILE…]

  • 替换

  • 插入

  • 删除文章来源地址https://www.toymoban.com/news/detail-610841.html

awk 复杂业务编程(TODO)

  • Usage:
    awk [OPTIONS] ‘program’ [INPUTFILE…]
    awk -f program-file [INPUTFILE…]

参考

  • GNU grep manual
  • GNU sed, a stream editor
  • GNU Awk User’s Guide

到了这里,关于shell 文本数据处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包