我有一个这样的文本文件:

\t (hello world)

我需要用一个唯一的值(例如ob1、obj2等)替换括号中的文本,以便
\t (obj)
\t (obj)
\t (obj)

变成。。。
\t (obj1)
\t (obj2)
\t (obj3)

或者其他任何独一无二的东西。使用任何在cygwin中工作的工具的解决方案都可以工作。我尝试使用bash和sed执行此操作失败:
#!/bin/bash
x=1
for fl in myfile; do
    cp $fl $fl.old
    sed 's/\\t \(.*\)/\\t \("${x}"\)/g' $fl.old > $fl.new
    x=$((x+1))
    echo $x
done

最佳答案

我知道的最好的方法是使用perl就地编辑:
例如,myfile.txt包含:

\t (obj)
\t (obj)
\t (obj)

运行就地编辑:
perl -i.bak -ne '$a=int(rand()*2000); s/\((.*?)\)/{$1$a}/g; print' myfile.txt

myfile.txt现在包含:
\t (obj1869)
\t (obj665)
\t (obj1459)

显然,要根据您的需求调整2000
编辑:如果要使用递增标识符,请使用:
perl -i.bak -ne '$a++; s/\((.*?)\)/{$1$a}/g; print' myfile.txt

关于regex - 用随机值替换文本文件中的模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10517409/

10-12 05:03