【问题标题】:extract string from a file using shell script使用 shell 脚本从文件中提取字符串
【发布时间】:2011-08-08 05:27:51
【问题描述】:

我有一个名为 log.txt 的文件。文件包含如下:-

/proc
used    avail
10      100

如何使用 shell 脚本从该文件中提取以下字符串。我希望提取以下字符串。

/proc
10
100

【问题讨论】:

  • 不要忘记accept the most useful answers您现有的问题。
  • 根据 Eric 和我自己的回答,您能否编辑您的问题以包含 log.txt实际 内容以及您的 实际 i> 期望的输出,而不是期望 StackOverflow 社区猜测。非常感谢!
  • 啊哈。谢谢@dogbane。一点点格式让世界变得与众不同。

标签: string unix shell extract


【解决方案1】:
awk '{print $1 $4 $5}' log.txt

【讨论】:

  • thx,但实际上文件内容并不像上面那样。它就像:- 在第一行它唯一的 /proc。在第二行是“使用”和“可用”,在下一行是“10”和“100”。在“使用”下方是“10”,在“使用”下方是“100”。结构是这样的。希望你能理解我想在这里描述的内容
  • 请看看我在第一页的问题(向上滚动)...你的答案不适合那个
【解决方案2】:
awk '/\/proc/ {print;getline;getline;print $1"\n"$2}' log.txt

只要一行匹配/proc,上述awk 命令就会调用getline 两次。然后print 语句在匹配后打印出第二行。

输出:

/proc
10
100

【讨论】:

    【解决方案3】:

    使用 sed,如果是 10 到 100 之间的空格:

    sed -e '2d;3s/  */\n/' log.txt
    

    如果你有 10 到 100 个标签,并且你给了 GNU sed:

    sed -e '2d;3s/\t\t*/\n/' log.txt
    

    如果你有 10 到 100 个标签,并且你没有给 GNU sed,而是真正的标签而不是上面的 2 \t。

    【讨论】:

      【解决方案4】:

      避免使用 sed(或 awk)并使用标准 UNIX 实用程序,如果是 10 到 100 之间的空格:

      paste -s -d " " file | tr -s " " | cut -d " " -f 1,4,5 | tr " " "\n"
      

      如果你有 10 到 100 个标签,并且你有 GNU 实用程序:

      paste -s -d "\t" file | tr -s "\t" | cut -f 1,4,5 | tr "\t" "\n"
      

      如果是标签,您有 10 到 100 个,并且您没有提供 GNU 实用程序,而是提供了真正的标签而不是上面的 \t 和真正的而不是 \n。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-08
        • 1970-01-01
        • 2012-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多