【发布时间】:2017-03-15 15:34:54
【问题描述】:
我正在尝试从文本文件中读取值。
我有 test1.txt,看起来像
sub1 1 2 3
sub8 4 5 6
我想在指定“sub1”时获得值“1 2 3”。
我得到的最接近的是:
subj="sub1"
grep "$subj" test1.txt
但答案是:
sub8 4 5 6
我读过 grep 会为您提供匹配的下一行,因此我尝试将文本文件更改为以下内容:
test2.txt 看起来像:
sub1
1 2 3
sub8
4 5 6
但是,当我输入时
grep "$subj" test2.txt
答案是:
sub1
这应该是超级简单的东西,但我尝试过 awk、seg、grep、egrep、cat,但没有一个工作...我还阅读了一些相关的帖子,但没有一个真正有帮助
【问题讨论】:
-
grep 不返回匹配后的下一行,它返回匹配的行本身。看起来您的原始 grep 结果没有返回预期值,但第二个肯定是。我建议您在针对 test1.txt 执行 grep 之前尝试回显变量内容,以确保将变量设置为您认为的值。
-
@tripleee,我不确定副本是否代表 OP 正在尝试的内容——他们基于误解退回到多行匹配,但他们第一次尝试的格式有键和检索值在同一行。
-
@CharlesDuffy 嗯,您的解释似乎与我的一致?虽然如果 OP 真的想在比赛结束后打印该行,我们也有一个副本; e. G。 stackoverflow.com/questions/17283567/…
-
问题不在于命令,而在于 Apple 文本文件格式的格式。
while IFS=$' \t\n' read -r -d $'\r' key value1 value2 value3 || [[ $key || $value ]]; do #printf 'Saw key: %q and values: %q\n' "$key" "$values" >&2 if [[ $key = "$target" ]]; then echo "Found values: $value1" echo "Found values: $value2" echo "Found values: $value3" fi done <Desktop/ANE/test1.txt回复Found values: 1 Found values: 2 Found values: 3