或更一般地说,如何用另一个捕获的图案替换图案。
我想为多个html文件执行此操作。像:
find . -name '*.html' | xargs sed -i 's/(?<=title\>).*(?=\<\/title)/string2/g'
除了使用其他模式动态捕获string2
。
更新
虽然有点冗长,但我主要通过shell脚本
来解决这个问题#!/bin/bash
file=$1
h1=`grep -oP '(?<=h1\>)(?!FreeType).*(?=\<\/h1)' $file` # I want to find a h1 tag without a 'FreeType' word in it
echo ${h1} finded
perl -i.bak -pe "s[(?<=title\>).*(?=\<\/title)][${h1}]g" $file
和
find . -name '*.html' -exec ~/replace.sh {} \;
答案 0 :(得分:1)
sed并不支持环顾四周,但你可以抓住标签然后把它们放回去:
find . -name '*.html' | xargs sed -i 's_<title>.*?</title>_<title>$string2</title>_g'
我将量词更改为 reluctant ,以避免匹配将第一个开放标记的所有输入吞噬到最后一个关闭标记作为一个匹配。
另请注意如何使用除\/\/
以外的字符作为分隔符来避免锯齿图案(即转义斜杠/
) - 这里我使用了下划线,但你可以使用任何东西 - 来制作模式更具可读性。