如何使用 Awk / cut 获取“/”之间的文本?

How to take a text between "/" with Awk / cut?

我在脚本中有这个命令:

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

这给了我这个回报:

/home/user/project/dev-env

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

... | cut -d/ -f3

"Third field, as cut by slash delimiter"

使用cut:

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

结果:

user

这告诉 cut 使用 / 作为分隔符,return 作为第三个字段。 (第一个字段是blank/empty,第二个字段是home。)

使用awk:

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

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

假设 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.

的退出代码