regex - 重复正则表达式模式

标签 regex sed

首先,我不知道这是否真的可能,但我想做的是重复一个正则表达式模式。
我使用的模式是:

sed 's/[^-\t]*\t[^-\t]*\t\([^-\t]*\).*/\1/' films.txt

一个输入
250.    7.9    Shutter Island (2010)    110,675

将返回:
Shutter Island (2010)

我匹配所有无标签,(250。)然后标签,然后所有无标签(7.9)然后标签。接下来我反向引用电影标题,然后匹配所有剩余的字符 (110,675)。

它工作正常,但我正在学习正则表达式,这看起来很难看,正则表达式 [^-\t]*\t 在其自身之后重复,无论如何要重复这个,就像你可以像 {2,2} 这样的字符一样?

我试过 ([^-\t]*\t){2,2} (和变体)但我猜这是试图匹配 [^-\t]*\t\t?
此外,如果有任何方法可以使我上面的代码更短更干净,我们将不胜感激。

最佳答案

这对我有用:

sed 's/\([^\t]*\t\)\{2\}\([^\t]*\).*/\2/' films.txt

如果您的 sed支持 -r你可以摆脱大部分的转义:
sed -r 's/([^\t]*\t){2}([^\t]*).*/\2/' films.txt

换第一个2选择不同的字段 (0-3)。

这也将起作用:
sed 's/[^\t]\+/\n&/3;s/.*\n//;s/\t.*//' films.txt

更改 3选择不同的字段 (1-4)。

关于regex - 重复正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3980171/

相关文章:

python - 无效表达式/缺少组名称

linux - 变量没有传递到远程机器

regex - 如何在 linux/unix 中删除文件中特定行中间的逗号

regex - 具有相同起始位置的相同长度正则表达式替代方案的决胜局

java - 使用正则表达式替换某个字符串 - Java

regex - 描述正则表达式的语言本身是正则的吗?

javascript - 如何使用正则表达式从字符串中提取 CSS 规则

regex - 如果扩展名是大写,primefaces 文件上传预览将不起作用

linux - 查找与正则表达式的链接

linux - 查找包含匹配项和提取字段的段落