首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >映射对象中的Grep字符串

映射对象中的Grep字符串
EN

Stack Overflow用户
提问于 2022-04-18 06:30:32
回答 3查看 141关注 0票数 1

我正在尝试提取客户端对象中的每个用户名值,并将其存储在数组(bash)中。然而,即使通过regex101.com中的匹配,grep也无法匹配。

代码语言:javascript
运行
复制
//a.txt
username = "fakeuservalue"

clients = [
  {
    username = "user1"
  },
  {
    username = "user2"
  }
]


x=$(cat a.txt | grep -e 'username\s+=\s+\"(.*)\"')
echo $x

有什么线索吗?我还试图对“客户端”对象添加另一个检查,以跳过检索“伪造用户值”。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-18 08:59:43

您可以使用

代码语言:javascript
运行
复制
x=$(sed -n '/^clients = \[/,/^]$/s/.*username *= *"\(.*\)".*/\1/p' a.txt)

请参阅在线演示

代码语言:javascript
运行
复制
#!/bin/bash
s='username = "fakeuservalue"

clients = [
  {
    username = "user1"
  },
  {
    username = "user2"
  }
]'
sed -n '/^clients = \[/,/^]$/s/.*username *= *"\(.*\)".*/\1/p' <<< "$s"

输出:

代码语言:javascript
运行
复制
user1
user2
票数 0
EN

Stack Overflow用户

发布于 2022-04-18 09:10:44

1.使用grep提取用户名值

代码语言:javascript
运行
复制
grep -oP '(?<=username = ")[^"]*' a.txt

2.为数组arr1分配用户名值。

代码语言:javascript
运行
复制
readarray -t arr1 <<< $(grep -oP '(?<=username = ")[^"]*' a.txt)

3.打印所有数组arr1元素

代码语言:javascript
运行
复制
printf "%s\n" ${arr1[@]}

4.在具有3个元素的数组arr1中打印第一个和最后一个元素

代码语言:javascript
运行
复制
echo "${arr1[0]}"
echo "${arr[2]}"
票数 0
EN

Stack Overflow用户

发布于 2022-04-18 09:49:34

如果sed是一个选项,您可以使用;

代码语言:javascript
运行
复制
$ x=($(sed -n '/clients = \[/,/]/{/username/s/.*= "\([^"]*\)"/\1/p}' a.txt))
$ echo ${x[0]}
user1
$ echo ${x[1]}
user2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71908309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档