根据包含键值对的字符串,我有一个大文件。我正在寻找一种正确的方法来搜索值为'apple'的值对(可以是上限或下限),如果找到则只输出相关的键值对。
对于前。 55 = APPLE
<SOH>
是此处的分隔符。
8=FIX.4.2<SOH>9=153<SOH>35=D<SOH>49=BLP<SOH>56=SCHB<SOH>34=1<SOH>50=30737<SOH>97=Y<SOH>52=20000809-20:20:50<SOH>11=90001008<SOH>1=10030003<SOH>21=2<SOH>55=APPLE<SOH>54=1<SOH>38=4000<SOH>40=2<SOH>59=0<SOH>44=30<SOH>47=I<SOH>60=20000809-18:20:32<SOH>10=061<SOH>
很高兴你能提出任何建议。
答案 0 :(得分:1)
尝试使用GNU grep:
grep -ioP '>\K[^=]+=apple(?=<)' file
输出:
55=APPLE
答案 1 :(得分:1)
了解有关真实通缉信息的更多信息:
返回行数(如果没有则返回0)
<SOH>
假设:
APPLE
是结尾分隔符~
不包含 apple 答案 2 :(得分:1)
使用one of these proper solutions将您的字符串转换为数组,以便您可以遍历所有项目。在执行此操作时,使用if字符串比较检查项目的值。
if [ "$value" = "APPLE" ]; then
# do stuff
fi
答案 3 :(得分:1)
使用awk
:
awk -v RS="<SOH>" 'toupper($0)~/APPLE/' File
将<SOH>
设为记录分隔符。然后检查是否与APPLE匹配任何记录(使其不区分大小写,首先将转换后的记录转换为大写),如果匹配,则打印记录。
答案 4 :(得分:1)
您可以在模式中使用数字后跟=和关键字的数字:
grep -io "[0-9]*=apple" file
-i
, - signore-case -o
, - 仅匹配[0-9]
0到9之间范围内的单个字符*
在零和无限次之间,=apple
匹配字符= apple字面(不区分大小写)