我刚刚在超级用户上发布了this question,但我还没有得到我喜欢的答案。在这里,稍作修改。
我希望有一种方法可以让sed用替换替换整行(而不仅仅是匹配),所以我可以这样做:
sed -e "/$some_complex_regex_with_a_backref/\1/"
并让它只打印反向引用。
从this question开始,似乎可以通过正则表达式来匹配整行,或使用其他工具(如perl)。简单地将regex
更改为.*regex.*
并不总是有效(如该问题中所述)。例如:
$ echo $regex
\([:alpha:]*\)day
$ echo "$phrase"
it is Saturday tomorrow
Warm outside...
$ echo "$phrase" | sed "s/$regex/\1/"
it is Satur tomorrow
Warm outside...
$ echo "$phrase" | sed "s/.*$regex.*/\1/"
Warm outside...
$ # what I'd like to have happen
$ echo "$phrase" | [[[some command or string of commands]]]
Satur
Warm outside...
我正在寻找最简洁的方法来替换整行(而不仅仅是匹配部分),假设如下:
grep -o
不会删除它)。我想到的是以下(但它很难看,所以我想知道是否有更好的东西):
$ sentinel=XXX
$ echo "$phrase" | sed "s/$regex/$sentinel\1$sentinel/" |
> sed "s/^.*$sentinel\(.*\)$sentinel.*$/\1/"
答案 0 :(得分:2)
这可能对您有用:
sed '/'"$regex"'/!b;s//\n\1\n/;s/.*\n\(.*\)\n.*/\1/' file