从字符串中搜索键值对,只输出匹配的记录
Search for key value pair from the string and output only the matching record
就包含键值对的字符串而言,我有一个很大的文件。我正在寻找一种正确的方法来搜索值为 'apple'(可以是上限或下限)的值对,如果找到则只输出相关的键值对。
例如。
55=苹果
<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>
很高兴您能提供任何建议。
用 GNU grep 试试:
grep -ioP '>\K[^=]+=apple(?=<)' file
输出:
55=APPLE
没有关于真正想要的信息的更多信息:
Return 行数(如果不存在则为 0)
grep -i -E -c -e '(^|<SOH>)[^=]*=APPLE<SOH>'
假设:
<SOH>
是结束分隔符
- 你只想要
APPLE
而不是 word/pattern 包含 apple
使用 one of these proper solutions 将您的字符串转换为数组,以便您可以遍历所有项目。在执行此操作时,使用 if 字符串比较检查项目的值。
if [ "$value" = "APPLE" ]; then
# do stuff
fi
与awk
:
awk -v RS="<SOH>" 'toupper([=10=])~/APPLE/' File
设置<SOH>
为记录分隔符。然后检查是否有任何记录与 APPLE 匹配(使其不区分大小写,首先将记录转换为大写),如果匹配,则打印记录。
您可以使用字符 class 作为数字后跟模式中的 = 和关键字:
grep -io "[0-9]*=apple" file
-i
, --忽略大小写
-o
, --only-matching
[0-9]
0 到 9 之间的单个字符
- 量词:
*
介于零次和无限次之间,
=apple
按字面匹配字符 =apple(不区分大小写)
就包含键值对的字符串而言,我有一个很大的文件。我正在寻找一种正确的方法来搜索值为 'apple'(可以是上限或下限)的值对,如果找到则只输出相关的键值对。
例如。 55=苹果
<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>
很高兴您能提供任何建议。
用 GNU grep 试试:
grep -ioP '>\K[^=]+=apple(?=<)' file
输出:
55=APPLE
没有关于真正想要的信息的更多信息:
Return 行数(如果不存在则为 0)
grep -i -E -c -e '(^|<SOH>)[^=]*=APPLE<SOH>'
假设:
<SOH>
是结束分隔符- 你只想要
APPLE
而不是 word/pattern 包含 apple
使用 one of these proper solutions 将您的字符串转换为数组,以便您可以遍历所有项目。在执行此操作时,使用 if 字符串比较检查项目的值。
if [ "$value" = "APPLE" ]; then
# do stuff
fi
与awk
:
awk -v RS="<SOH>" 'toupper([=10=])~/APPLE/' File
设置<SOH>
为记录分隔符。然后检查是否有任何记录与 APPLE 匹配(使其不区分大小写,首先将记录转换为大写),如果匹配,则打印记录。
您可以使用字符 class 作为数字后跟模式中的 = 和关键字:
grep -io "[0-9]*=apple" file
-i
, --忽略大小写-o
, --only-matching[0-9]
0 到 9 之间的单个字符- 量词:
*
介于零次和无限次之间, =apple
按字面匹配字符 =apple(不区分大小写)