【问题标题】:Unix sed command - extract text between 2 slashesUnix sed 命令 - 提取两个斜杠之间的文本
【发布时间】:2021-05-24 04:56:26
【问题描述】:

为一个使用 sed 的基本问题道歉,我一直在努力解决这个问题,但我的大脑让我失望了......

我正在尝试在某个 unix shell 中提取两个斜杠之间的文本。

我想提取第 3 和第 4 个斜线 (DEV) 之间的文本。我一直在尝试构建以下内容,但没有成功..

echo "/share/test/DEV/2021-05-21/out/9988776_948016287_1.PDF" |
sed 's|\(.3\)/.4|\1|'

非常感谢任何帮助。

非常感谢M

【问题讨论】:

    标签: unix sed


    【解决方案1】:

    awk 应该是一件容易的事,请尝试关注。只需将字段分隔符设置为 / 并根据需要打印第 4 个字段。

    echo "/share/test/DEV/2021-05-21/out/9988776_948016287_1.PDF" | awk -F'/' '{print $4}'
    

    使用sed,您可以尝试以下操作:

    echo "/share/test/DEV/2021-05-21/out/9988776_948016287_1.PDF" | 
    sed -E 's/^\/[^/]*\/[^/]*\/([^/]*)\/.*/\1/'
    

    sed -E 's_^/[^/]*/[^/]*/([^/]*)/.*_\1_' Input_file
    

    【讨论】:

    • 您可以使用_ 作为模式分隔符,以避免需要像这样转义所有/sed -E 's_^/[^/]*/[^/]*/([^/]*)/.*_\1_'
    • @mattb,一定要把它和现有的一起添加到那里。
    【解决方案2】:

    cut -d/ -f4

    -d为分隔符,-f4为第4项(第1项假定为空)

    【讨论】:

      【解决方案3】:

      使用

      path="/share/test/DEV/2021-05-21/out/9988776_948016287_1.PDF"
      IFS='/' read -ra arr <<< "$path"
      echo ${arr[3]}  
      

      结果DEV.

      path="/dir with space/test/DEV/2021-05-21/out/9988776_948016287_1.PDF" 的结果相同。

      【讨论】:

      • 不错,但在 path="/dir with space/test/DEV/2021-05-21/out/9988776_948016287_1.PDF" 上失败了。
      • @WalterA 已修复。
      【解决方案4】:

      这可能对你有用(GNU sed):

      sed -nE 's#^(([^/]*)/){4}.*#\2#p' file
      

      从由/'s 分隔的记录中提取第四个字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        • 1970-01-01
        • 2015-07-28
        • 2013-03-29
        • 1970-01-01
        相关资源
        最近更新 更多