【问题标题】:Extract The Second Word In A Line From A Text File从文本文件中提取一行中的第二个单词
【发布时间】:2014-10-18 22:53:48
【问题描述】:

我目前需要在文本文件的一行中提取第二个单词 (CRISTOBAL)。

                 *   CRISTOBAL  AL042014  08/05/14  12  UTC   *

“CRISTOBAL”行中的第二个单词每天都会有所不同,所以我只需要找到一种方法来提取该行中的第二个单词/字符。

【问题讨论】:

  • 你需要哪个 - 单词或字符?

标签: bash unix awk sed cut


【解决方案1】:

第二个字

echo '*   CRISTOBAL  AL042014  08/05/14  12  UTC   *' | awk  '{print $2}'

会给你CRISTOBAL

echo 'testing only' | awk  '{print $2}'

会给你only

如果行的结构发生变化,您可能需要修改它。

文本文件中各行的第二个单词

如果你的文本文件包含以下两句

this is a test
*   CRISTOBAL  AL042014  08/05/14  12  UTC   *

运行 awk '{print $2}' filename.txt 将返回

is
CRISTOBAL

第二个字符

echo 'testing only' | cut -c 2

这将为您提供e,这是第二个字符,您可能还需要修改它以满足您的需要。

【讨论】:

    【解决方案2】:

    在需要 sed 的情况下/仅可用

    sed '^ *[^ ]* *\([^ ]*\) .*/\1/' YourFile
    

    取第二个非空白组(假设单词后至少有 1 个空格

    但我更喜欢 cut 以提高速度(如果需要任何操作,我更喜欢 awk)。

    实际上它主要取决于脚本中的下一个动作(如果有的话)。

    【讨论】:

      【解决方案3】:

      我知道它已经过时了,但是 @NeronLeVelu 的头发短了我在管道中需要的东西。

      ip link show wlan0 | grep 'link'| sed 's/^ *[^ ]* *\([^ ]*\) .*/\1/'
      

      是我用来提取 MAC 地址的。由于其他原因,我无法使用 awk。

      【讨论】:

      • 我很高兴你能实现你想要的,但这并不能以任何方式回答 OP 的问题。考虑在@NeronLeVelu 的回答下发表评论
      【解决方案4】:

      您可以使用 shell 内置命令:

      #!/bin/sh
      set -f && set +f -- *   CRISTOBAL  AL042014  08/05/14  12  UTC   *
      echo $2
      

      或使用别名更好地阅读:

      #!/bin/sh
      alias explode='set -f;set +f --'
      
      LINE='*   CRISTOBAL  AL042014  08/05/14  12  UTC   *'
      explode $LINE
      echo $2
      

      “-f”表示:
      禁用文件名生成(通配符),
      所以星号不会扩展为文件名。
      一次关闭和打开它会再次设置默认值。 这适用于所有 POSIX shell。

      【讨论】:

        猜你喜欢
        • 2023-03-23
        • 2015-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-24
        相关资源
        最近更新 更多