【问题标题】:Using regexes to remove lines between two strings使用正则表达式删除两个字符串之间的行
【发布时间】:2016-09-06 14:44:48
【问题描述】:

我目前正在制作一个脚本,它将显示从我旁边的地铁站出发的下一班次。

我有一个模式(\b\d$|Westbound) 将捕获行号和方向。但是,如何删除两者之间的线条?搜索它并没有给我任何结果。

考虑输出:

5
Ringen via Storo
12 min
Eastbound

4
Vestli via Storo
16:10
Westbound

5
Vestli via Majorstuen
16:11
Eastbound

5
Ringen via Majorstuen
16:12
Westbound

格式为:

Line
Name of line
Time
Direction

问题是,有没有什么方法可以使用 sed 过滤掉所有行,比如 Westbound,以便打印的唯一行是:

5
Ringen via Storo
12 min
Eastbound

5
Vestli via Majorstuen
16:11
Eastbound

这意味着删除以 5 开头并以 Westbound 结尾的任何文本段。这是否可以通过正则表达式和 bash 中的内置工具实现,或者最好找到解决此问题的方法?

提前致谢!

【问题讨论】:

  • 好的,你很清楚你想做什么,我建议你尝试实际去做。 StackOverflow 不是人们为您实施程序的地方,而是您实施程序的地方,当您有特定问题时人们会帮助您。
  • 上述输出是由编写的脚本产生的吗?如果是这样,为什么不修改该脚本?
  • Regex 可能是此处解决方案的 part,但我认为您需要一个额外的工具来阅读和处理每个段落。也许 sed 可以做到这一点,Java 和 C# 肯定可以。
  • stackoverflow.com/questions/16202900/… 可能是您的解决方案
  • /.*\n.*\n.*\nWestbound\n*/ ?

标签: regex bash


【解决方案1】:

执行这个 -

echo '5
Ringen via Storo
12 min
Eastbound

4
Vestli via Storo
16:10
Westbound

5
Vestli via Majorstuen
16:11
Eastbound

5
Ringen via Majorstuen
16:12
Westbound' | gawk 'BEGIN {
    FS="\n"
    RS=""
}
$4 != "Westbound" {
    print
}'

- 生成以下输出-

5
Ringen via Storo
12 min
Eastbound
5
Vestli via Majorstuen
16:11
Eastbound

【讨论】:

  • 这正是我想要的。感谢您抽出宝贵时间!
猜你喜欢
  • 2017-06-20
  • 2018-01-16
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多