如何提取文本文件中引号包裹的指定字段并保存到变量
解决方案
以下提供不同场景下的可用实现方式,默认你的目标文件命名为user.csv。
方法1:Bash + Awk (shell脚本场景首选)
直接一行命令提取字段并赋值给变量:
# 提取指定行的两个字段同时赋值给两个变量 read target_user expire_days < <(awk -F '","' '$1~/"jeffrey$/{print substr($1,2), substr($3,1,length($3)-1)}' user.csv)
执行完可以直接验证变量:
echo $target_user # 输出结果:jeffrey echo $expire_days # 输出结果:90 days
参数说明:
-F '","'把, "设置为字段分隔符,刚好适配被引号包裹的CSV字段拆分逻辑- 匹配到第一列结尾为jeffrey的行后,用
substr去掉字段首尾多余的引号即可
如果需要更简单的写法,也可以直接全局替换引号:
read target_user expire_days < <(awk -F, '$1~/"jeffrey"/{gsub(/"/,"",$1);gsub(/"/,"",$3);print $1,$3}' user.csv)
方法2:纯Bash实现(无额外依赖)
如果环境里没有awk等工具,可以用原生bash语法处理:
while IFS=',' read -r user_col pass_col expire_col; do # 移除字段前后的引号 user_col=${user_col//\"/} expire_col=${expire_col//\"/} if [ "$user_col" == "jeffrey" ]; then target_user=$user_col expire_days=$expire_col break fi done < user.csv
方法3:Python实现(复杂CSV场景首选)
如果你的CSV包含转义字符、字段内逗号等复杂情况,用Python原生csv模块处理兼容性最好:
import csv with open('user.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: if row['user'] == 'jeffrey': target_user = row['user'] expire_days = row['expires_in'] break
执行完之后直接使用target_user和expire_days两个变量即可。
内容的提问来源于stack exchange,提问作者Jamal Hossain
相关产品推荐
相关产品推荐

