替换所有文件中的字符串 - Unix

时间:2013-03-05 18:00:30

标签: bash file unix terminal replace

我正在尝试用:::替换一个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移到td mv ./od/* ./td/*

2 个答案:

答案 0 :(得分:19)

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

根本不需要od/

修改

稍微简单的变化:

ls td/*.c | xargs sed -i '' "s/:::/::/g"

答案 1 :(得分:3)

使用sed处理每个文件的简单循环应该足够了。

for inp in ./td/*; do
    fname=${inp##*/}
    sed 's/:::/::/g' "$inp" > ./od/"$fname"
done