如何在引号中抓取字段

How to grab fields in inverted commas

我有一个包含以下行的文本文件:

"user","password_last_changed","expires_in"
"jeffrey","2021-09-21 12:54:26","90 days"
"root","2021-09-21 11:06:57","0 days"

如何从引号中获取两个字段 jeffrey90 days 并保存在变量中。

IFS=","

arr=( $(cat txt | head -2 | tail -1  | cut -d, -f 1,3 | tr -d '"') )
echo "${arr[0]}"
echo "${arr[1]}"

结果是一个数组,可以通过索引访问其中的元素。

while read -r line; do # read in line by line
    name=$(echo $line | awk -F, ' { print } ' | sed 's/"//g') # grap first col and strip "
    expire=$(echo $line | awk -F, ' { print } '| sed 's/"//g') # grap third col and strip "
    echo "$name" "$expire" # do your business
done < yourfile.txt

如果 awk 是一个选项,您可以保存一个数组,然后将元素保存为单独的变量。

$ IFS="\"" read -ra var <<< $(awk -F, '/jeffrey/{ print , $NF }' input_file)
$ $ var2="${var[3]}"
$ echo "$var2"
90 days
$ var1="${var[1]}"
$ echo "$var1"
jeffrey

下面的方法可能会帮助您使用 sedawk 命令

#!/bin/sh
username=$(sed -n '/jeffrey/p' demo.txt | awk -F',' '{print }')
echo "$username"

expires_in=$(sed -n '/jeffrey/p' demo.txt | awk -F',' '{print }')
echo "$expires_in"

输出:

jeffrey
90 days

注: 如果他们只有不同的用户名,上述方法将起作用 据我所知用户名没有重复