MAC OSXを使用してファイルの文字列を置き換える

MAC OSXを使用してファイルの文字列を置き換える

MacOSX 10.10では、(大きな)ファイルの文字列を置き換える必要があります。私のファイルは次のとおりです。

Y16-TUL-SUB_ Y16-TUL-SUB_ Y16-TUL-SUB_ Y16-TUL-SUB_ Y16-TUL-SUB-
Y16-TUL-SUB_ Y16-TUL-SUB_

Y16_TUL_SUB_に変更する必要がありますY16-TUL-SUB-。ファイル名はtest.txt

私はさまざまな提案をたくさん試しましたsed。たとえば、次のようになります。awkpython

#!/usr/bin/env python import sys import os import tempfile

 tmp=tempfile.mkstemp()

 with open(sys.argv[1]) as fd1, open(tmp[1],'w') as fd2:
     for line in fd1:
         line = line.replace('Y16_TUL_SUB_','Y16-TUL-SUB-')
         fd2.write(line)

 os.rename(tmp[1],sys.argv[1])

それともsedMacでも動作します。

またはfind:

 find . -type f -name test.txt | xargs sed -i ""
 "s/Y16_TUL_SUB_/Y16-TUL-SUB-/g'

またはsed:

 sed -i -e "s/Y16_TUL_SUB_/Y16-TUL-SUB/g" test.txt

またはawk

 awk '{gsub(/Y16_TUL_SUB_/,"Y16-TUL-SUB")}' test.txt

これらのコマンドはすべて実行され、空の出力ファイルを返したか、いずれの場合でも元のファイルで何も変更されませんでした。

私は何が間違っていましたか?

ベストアンサー1

sedOS Xで使用する方法。

テストファイルを作成しました。

$ cat test.txt
tasdasdasd

asd
asd
as
d
as
d
ddddddd

ffdfdfdfdfdf

呼び出しsed''パラメータでなければなりません):

$ sed -i '' "s/as/replaced_ad/g" test.txt

出力ファイルの表示:

$ cat test.txt
treplaced_addreplaced_addreplaced_add

replaced_add
replaced_add
replaced_ad
d
replaced_ad
d
ddddddd

ffdfdfdfdfdf

sedOS Xでは、GNUとは少し異なりますsed。 OS X端末で使ってみるとman sed使い方がわかるだろうsed

おすすめ記事