在 Bash 脚本中将变量插入 sed 命令

在 Bash 脚本中将变量插入 sed 命令

我有类似这样的文本文件:

Some-text
Keyword
Some-text
Some-text
Keyword
Some-text
Keyword
Keyword

我想用“number.extension”替换每个“关键字”,其中第一个关键字匹配时数字为 1,第二个关键字匹配时数字为 2 ,等等。

我知道我应该将 bash 循环与 sed 结合使用(sed 's:Keyword:Number:g'),但我不确定如何在该 sed 命令中插入数字变量。

由于这是 HTML 文件,因此这些“关键字”之间可以有空行或任何文本。

答案1

编辑:您可以在 sed 中按如下方式使用变量,

count=1
extension=".jpg"
cp yourfile tempfile
for (( i=1; i<=`wc yourfile | awk '{ print $1 }'`; i++))
do

#for (( j=1; j<=`sed -n ''"$i"' p' yourfile | wc | awk '{ print $2 }'`; j++))
#do
        sed -i ''"$i"' s/[a-zA-Z0-9]*[Kk][Ee][Yy][Ww][Oo][Rr][Dd]/'"$count$extension"'/1' yourfile
        diff yourfile tempfile
        if [ $? -ne 0 ]
        then    
        count=$(expr $count + 1)
        cp yourfile tempfile
        fi  
#done
done

答案2

这能达到你想要的效果吗?

perl -pe '$n++ if /Some-text/;s/Keyword/SomeText '\''$n'\''/'

对于更复杂的替换(例如涉及数学),更高级的脚本语言可能更合适。

相关内容