【发布时间】:2021-10-28 15:24:39
【问题描述】:
日志文件中的示例文本
2021/08/29 10:25:37 20210202GL1 Message Params [userid:user1] [timestamp:20210829] [from:TEST] [to:0214736848] [text:You requested for Pin reset. Your Customer ID: 0214736848 and PIN: 4581]
2021/08/27 00:03:18 20210202GL2 Message Params [userid:user1] [timestamp:20210827] [from:TEST] [to:0214736457] [text:You requested for Pin reset. Your Customer ID: 0214736457 and PIN: 6193]
2021/08/27 10:25:16 Thank you for joining our service; Your ID is 0214736849 and PIN is 5949
其他措辞和格式可以改变,但 ID 和 PIN 不会改变
每行的预期输出
0214736848#4581
0214736457#6193
0214736849#5949
以下是我使用 bash 尝试过的内容,但目前只能提取数值
while read p; do
NUM=''
counter=1;
text=$(echo "$p" | grep -o -E '[0-9]+')
for line in $text
do
if [ "$counter" -eq 1 ] #if is equal to 1
then
NUM+="$line" #concatenate string
else
NUM+="#$line" #concatenate string
fi
let counter++ #Increment counter
done
printf "$NUM\n"
done < logfile.log
当前的输出虽然不是预期的。
2021#08#29#00#03#18#20210202#2#1#20210826#0214736457#0214736457#6193
2021#08#27#10#25#37#20210202#1#1#20210825#0214736848#0214736848#4581
2021#08#27#10#25#16#0214736849#5949
【问题讨论】:
-
使用 sed:
sed -n 's/.*ID: \([0-9]\+\).*PIN: \([0-9]\+\).*/\1#\2/p' file -
您添加了第三行输入,因为you said in a comment 那是我的答案无法正确处理的有效输入,但是您没有将该行的输出添加到预期输出中,所以我们现在很困惑。如果应该有新的第三行输入的输出,那么请edit你的问题来显示它,如果没有,那么请edit你的问题来澄清你的需求。