![检索中间行与模式匹配的上下行?](https://linux22.com/image/132165/%E6%A3%80%E7%B4%A2%E4%B8%AD%E9%97%B4%E8%A1%8C%E4%B8%8E%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%E7%9A%84%E4%B8%8A%E4%B8%8B%E8%A1%8C%EF%BC%9F.png)
我有一个数据集(例如,一个文件),如下所示:
4.048 5.9392765
4.051 5.9392765
4.068 5.9392765
4.293 5.9392765
4.3 "A random string"
4.331 5.9392765
4.429 6.0137865
4.609 6.0303125
4.662 6.0303125
5.626 6.1261205
5.815 6.1261205
6.347 6.1261205
6.543 6.1261205
6.7 "A random string"
7.420 6.1611095
7.526 6.2542085
7.541 6.2698285
7.556 6.2698285
7.928 6.2698285
我想提取三行(行)的组,其中中间行的第二个字段是字符串而不是数字。例如,对于上面的输入,我想得到以下输出:
4.293 5.9392765
4.3 "A random string"
4.331 5.9392765
------------------------
6.543 6.1261205
6.7 "A random string"
7.420 6.1611095
我怎样才能做到这一点?
答案1
一个更简单的答案:
grep -C1 '"'文件
它查找包含引号字符 ( ) 的行"
并显示它们,前后各一行。
答案2
grep
解决方案:
grep -C1 -E '^[0-9]+\.[0-9]+[[:space:]]+[^0-9[:space:]]+' file
-C NUM
- 打印NUM
输出上下文的行-E
- 扩展正则表达式[^0-9[:space:]]+
- 匹配除空格[:space:]
或数字之外的任何字符[0-9]
输出:
51174.29300 2265.9392765
51174.3 "A random string"
51174.33100 2265.9392765
--
51176.54300 2266.1261205
51176.7 "A random string"
51177.42000 2266.1611095