我最近写了一个BASH脚本来检查文件中是否存在一个段落。
文件的内容是。
已发布的1个
保存完成
贸易储蓄储蓄成功
MCR:CMDTY的56945458 | 220841 | b,来源:ICE Tradecapture API
重试次数:0(从这一行我们检查公司名称–CMDTY)
出版4EO
保存完成
贸易储蓄储蓄成功
5666688 | 000 | b,用于MCR:CMDTY,来源:ICE
已发布的1个
保存完成
贸易储蓄储蓄成功
MCR:CMDTY的56945458 | 220841 | b,来源:ICE Tradecapture API
重试次数:0(从这一行我们检查公司名称–CMDTY)
需要匹配的段落是。
已发布的1个
保存完成
贸易储蓄储蓄成功
MCR:CMDTY的56945458 | 220841 | b,来源:ICE Tradecapture API
重试次数:0(从这一行我们检查公司名称–CMDTY)
将上述段落的内容保存在名为temp的文件中。
我写了一个简单的脚本来完成这项任务,但似乎不起作用。
#!/bin/bash
result=$(cat temp | grep -A 2 "Published 1EO's")
echo $result
line="Published 1EO's Save completed Trade saving save successful for trade 56945458|220841|b for MCR: CMDTY from source:ICE Tradecapture API retry count: 0 (From this line we check Company Name – CMDTY)"
echo $line | grep "\b$result\b"
if [ "$line" == "$result" ]; then
echo "match"
else
echo "does not match"
fi
任何帮助都将不胜感激。
谢谢您。
最佳答案
通常情况下,这些是不一样的。
grep var$result在内部包含新行(\n)字符,$line包含空格。
如果在echo$result之前设置IFS=$“\n”,则可以看到它们之间的区别。
我必须插入一些\n到$行(在正确的位置),现在工作正常:
#!/bin/bash
result=$(cat test.log | grep -A 2 "Published 1EO's")
IFS=$"\n"
echo $result
line=$(echo -e "Published 1EO's\nSave completed\nTrade saving save successful for trade 56945458|220841|b for MCR: CMDTY from source:ICE Tradecapture API retry count: 0 (From this line we check Company Name – CMDTY)")
echo "----------------------------------"
#echo $line | grep "\b$result\b"
echo $line
unset IFS
if [[ $line = $result ]]; then
echo "match"
else
echo "does not match"
fi
结果:
$./bashtest.sh
Published 1EO's
Save completed
Trade savi g save successful for trade 56945458|220841|b for MCR: CMDTY from source:ICE Tradecapture API retry cou t: 0 (From this li e we check Compa y Name – CMDTY)
----------------------------------
Published 1EO's
Save completed
Trade savi g save successful for trade 56945458|220841|b for MCR: CMDTY from source:ICE Tradecapture API retry cou t: 0 (From this li e we check Compa y Name – CMDTY)
match
关于linux - Shell脚本检查文件中是否存在段落/行流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40586948/