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 から td に移動しますmv ./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 に答える