如何从路径中提取第二个元素?

如何从路径中提取第二个元素?

如何使用 sed 提取此类模式?

这是我的道路:/sample/xyz/logs/test.logs

输出应该是:xyz

如果路径不断变化,例如像这样,这怎么可能

/example/xyz/log/test.logs?

使用 sed 还是 awk?

答案1

我知道有 3 种方法可以做到这一点。我假设路径作为标准输入传递。

方法一

echo "/sample/xyz/logs/test.logs" | cut -d / -f 3

这将使用 指定的分隔符剪切输入,-d /并选择第三个字段,即您想要的 xyz 部分。

方法二

echo "/sample/xyz/logs/test.logs" | awk -F / '{print $3}'

awk 是一个非常强大的命令,您可以用它编写非常复杂的逻辑。您可以以这种简单的形式使用它来执行与方法 1 相同的操作。

方法三

echo "/sample/xyz/logs/test.logs" | sed -r 's/^\/\w+\/(\w+)\/.*/\1/g'

与正则表达式一起使用时sed,您可以省略第一个斜杠、后面的单词以及后面的斜杠。取出第二个斜杠后面的单词,然后删除其余的单词。

正如您所看到的,这些方法的复杂性有所增加。

答案2

如果你的脚本是bash/dash/ksh/zsh,你不需要任何外部工具,参数替换可以给你答案:

path=/sample/xyz/logs/test.logs
path=${path#/*/}
echo ${path%%/*}
  • #从左侧移除。
  • %从右侧移除。
  • 将字符加倍会使匹配变得贪婪,即尽可能匹配。

答案3

如果你总是想要路径的第二部分,试试这个

echo "/sample/xyz/logs/test.logs" | awk -F/ '{print $3}'

相关内容