8

我正在尝试用一批 txtfiles 中的所有行替换一个字符串:::::它可以被视为一个单词,因为它的前面和后面总是有一个空格。

我可以用下面的 python 来做到这一点,但是通过 unix 终端是否有一种不那么“过度杀戮”/复杂的方式来做到这一点?(允许许多管道)

indir = "./td/"
outdir =  './od/'
for infile in glob.glob(os.path.join(indir,"*")):
  _,FILENAME = os.path.split()
  for l in codecs.open(infile,'r','utf8').readlines():
    l = l.replace(":::","::").strip()
    outfile = codecs.open(os.path.join(outdir,FILENAME),'a+','utf8')
    print>>outfile, l

然后我将所有文件从 od 移动到 tdmv ./od/* ./td/*

4

2 回答 2

22
find . -name "./td/*.c" -exec sed -i "s/:::/::/g" '{}' \;

od/根本不需要。

编辑:

一个稍微简单的变体:

ls td/*.c | xargs sed -i '' "s/:::/::/g"
于 2013-03-05T18:06:19.683 回答
3

一个简单的循环来处理每个文件sed就足够了。

for inp in ./td/*; do
    fname=${inp##*/}
    sed 's/:::/::/g' "$inp" > ./od/"$fname"
done
于 2013-03-05T18:04:23.083 回答