【问题标题】:How to take a text between "/" with Awk / cut? [duplicate]如何使用 Awk / cut 在“/”之间获取文本? [复制]
【发布时间】:2019-06-21 08:37:03
【问题描述】:

我在脚本中有这个命令:

find /home/* -type d -name dev-env 2>&1 | grep -v 'Permiso' >&2 > findPath.txt

这给了我这个回报:

/home/user/project/dev-env

我需要在“/”(用户)之间取第二个参数,以便稍后将其保存在变量中。我找不到获取“用户”文本的方法。

【问题讨论】:

    标签: linux bash awk cut


    【解决方案1】:

    使用cut:

    echo "/home/user/project/dev-env" | cut -d'/' -f3
    

    结果:

    user
    

    这告诉cut 使用/ 作为分隔符并返回第三个字段。 (第一个字段是空白/空,第二个字段是home。)

    使用awk

    echo "/home/user/project/dev-env" | awk -F/ '{print $3}'
    

    这告诉awk 使用/ 作为字段分隔符并打印第三个字段。

    【讨论】:

      【解决方案2】:

      假设 grep 生成的路径始终是绝对路径:

      second_component=$(find .... -type d -name dev-env 2>&1 | grep -v 'Permiso' | cut -d / -f 3)
      

      但是,您的方法还存在其他几个问题:

      您使用 /home/* 作为find 的起点。这只有在 /home 下只有一个子目录时才有效。不太可能发生的情况。

      即便如此,它也只有在 grep 只产生一行时才有效。这是一个语义问题:如果你得到不止一行怎么办——你对哪一行感兴趣?假设你知道你总是对第一行感兴趣,你可以通过head -n 1 传递结果来解决这个问题。

      接下来,您将 stderr 从 find 重定向到 stdout,这意味着来自 find 的任何错误都不会被注意到;你只会得到一些奇怪的结果。最好显示来自find 的任何错误消息,而是评估来自findgrep 的退出代码。

      【讨论】:

        【解决方案3】:
        ... | cut -d/ -f3
        

        "第三个字段,用斜线分隔符"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-19
          • 1970-01-01
          • 2012-11-03
          • 2014-12-10
          相关资源
          最近更新 更多