从Unix中的一行中提取特定的字符串

时间:2019-12-19 07:25:14

标签: unix grep

我有一行,如下所示,我正在尝试使用grep命令提取与给定模式匹配的字符串。但是它没有按预期工作。

# file: /test/test1 # owner: own # group: grp user::rwx user:nr:rwx user:ac:rwx user:ao:rwx group::r-x group:accounts:--x group:fin:r-x mask::rwx other::--- default:user::rwx default:group::r-x default:group:accounts:--x default:group:fin:rwx default:mask::rwx default:other::---

要搜索的模式

default:group:.*

使用命令

echo "# file: /test/test1 # owner: own # group: grp user::rwx user:nr:rwx user:ac:rwx user:ao:rwx group::r-x group:accounts:--x group:fin:r-x mask::rwx other::--- default:user::rwx default:group::r-x default:group:accounts:--x default:group:fin:rwx default:mask::rwx default:other::---" | grep -o "default:group:.*" | grep -o "rwx"

预期输出

default:group:fin:rwx

实际结果

default:group:accounts:--x default:group:fin:rwx default:mask::rwx default:other::---

1 个答案:

答案 0 :(得分:0)

default:group:.*不够精确,因为有多个匹配项:

$ echo "# file: /test/test1 # owner: own # group: grp user::rwx user:nr:rwx user:ac:rwx user:ao:rwx group::r-x group:accounts:--x group:fin:r-x mask::rwx other::--- default:user::rwx default:group::r-x default:group:accounts:--x default:group:fin:rwx default:mask::rwx default:other::---"|
grep -o "default:group:[^ ]*"

输出

default:group::r-x
default:group:accounts:--x
default:group:fin:rwx

您需要

$ echo ... | grep -o "default:group:fin:[^ ]*"

或选择第三场比赛。

更新:在注释中刚刚注意到default:group开头,以rwx 结尾:

$ echo ... | grep -o "default:group:[^ ]*rwx "