0

我有一个如下所示的文本字符串

"/path/to/log/file/LOG_FILE.log.2013-10-02-15:2013-10-02 15:46:57.809 INFO  - TTT005|Receive|0000293|N~0000284~YOS~TTT005~  ~000~YC~|YOS     TYOS-YCUPDT1-H                  20131002154657669284YCARR TTT005   Y0TD04 |1|0150520106050|001|051052020603|003|015030010101502702060510520101|000||000||                                                               "

这里"|"在字符串中重复了几次,我需要"|"使用 shell-script (BASH) 命令获取第 4 次出现的字符的索引。我试图找到一种使用 grep 命令选项的方法。

谢谢。

4

2 回答 2

1

使用 awk 你可以:

awk -F '|' '{print index($0, $5)-1}' file

这将打印文件中第四个管道的字符位置。

于 2013-10-03T07:33:45.713 回答
0

grep可以打印字节偏移量;与它一起使用时,-o会打印匹配部分的字节偏移量。

$ string="/path/to/log/file/LOG_FILE.log.2013-10-02-15:2013-10-02 15:46:57.809 INFO  - TTT005|Receive|0000293|N~0000284~YOS~TTT005~  ~000~YC~|YOS     TYOS-YCUPDT1-H                  20131002154657669284YCARR TTT005   Y0TD04 |1|0150520106050|001|051052020603|003|015030010101502702060510520101|000||000||"
$ grep -ob "[^|]*" <<< "${string}" | sed '5!d' | cut -d: -f1
132

或者,不使用grep

$ newstring=$(echo "${string}" | cut -d\| -f5-)
$ echo $(( ${#string} - ${#newstring} ))
132
于 2013-10-03T07:38:33.800 回答