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

use*_*412 3 sed awk shell-script

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

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

输出应该是:xyz

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

/example/xyz/log/test.logs?
Run Code Online (Sandbox Code Playgroud)

使用 sed 还是 awk?

jok*_*ker 6

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

方法一

echo "/sample/xyz/logs/test.logs" | cut -d / -f 3
Run Code Online (Sandbox Code Playgroud)

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

方法二

echo "/sample/xyz/logs/test.logs" | awk -F / '{print $3}'
Run Code Online (Sandbox Code Playgroud)

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

方法三

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

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

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