小编jak*_*und的帖子

在正则表达式中打印反向引用

我希望有一种方法让 sed 用替换(而不仅仅是匹配)替换整行,这样我就可以做这样的事情:

sed -e "/$some_complex_regex_with_a_backref/\1/"
Run Code Online (Sandbox Code Playgroud)

并让它只打印反向引用。

这个问题来看,似乎这样做的方法是使用正则表达式来匹配整行,或者使用其他工具(如 perl)。简单地更改regexto.*regex.*并不总是有效(如该问题中所述)。例如:

$ echo $regex
\([:alpha:]*\)day

$ echo $phrase
it is Saturday tomorrow

$ echo $phrase | sed "s/$regex/\1/"
it is Satur tomorrow

$ echo $phrase | sed "s/.*$regex.*/\1/"

$ # what I'd like to have happen
$ echo $phrase | [[[some command or string of commands]]]
Satur
Run Code Online (Sandbox Code Playgroud)

假设以下情况,我正在寻找最简洁的方法来做到这一点:

  • 正则表达式在一个变量中,因此不能根据具体情况进行更改。
  • 我想在不使用 perl 或其他更强大的语言的情况下做到这一点。

shell grep awk sed

6
推荐指数
1
解决办法
8510
查看次数

标签 统计

awk ×1

grep ×1

sed ×1

shell ×1