我正在尝试提取客户端对象中的每个用户名值,并将其存储在数组(bash)中。然而,即使通过regex101.com中的匹配,grep也无法匹配。
//a.txt
username = "fakeuservalue"
clients = [
{
username = "user1"
},
{
username = "user2"
}
]
x=$(cat a.txt | grep -e 'username\s+=\s+\"(.*)\"')
echo $x有什么线索吗?我还试图对“客户端”对象添加另一个检查,以跳过检索“伪造用户值”。
发布于 2022-04-18 08:59:43
您可以使用
x=$(sed -n '/^clients = \[/,/^]$/s/.*username *= *"\(.*\)".*/\1/p' a.txt)请参阅在线演示
#!/bin/bash
s='username = "fakeuservalue"
clients = [
{
username = "user1"
},
{
username = "user2"
}
]'
sed -n '/^clients = \[/,/^]$/s/.*username *= *"\(.*\)".*/\1/p' <<< "$s"输出:
user1
user2发布于 2022-04-18 09:10:44
1.使用grep提取用户名值
grep -oP '(?<=username = ")[^"]*' a.txt2.为数组arr1分配用户名值。
readarray -t arr1 <<< $(grep -oP '(?<=username = ")[^"]*' a.txt)3.打印所有数组arr1元素
printf "%s\n" ${arr1[@]}4.在具有3个元素的数组arr1中打印第一个和最后一个元素
echo "${arr1[0]}"
echo "${arr[2]}"发布于 2022-04-18 09:49:34
如果sed是一个选项,您可以使用;
$ x=($(sed -n '/clients = \[/,/]/{/username/s/.*= "\([^"]*\)"/\1/p}' a.txt))
$ echo ${x[0]}
user1
$ echo ${x[1]}
user2https://stackoverflow.com/questions/71908309
复制相似问题