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

答え2

奇妙な。 「を」に変更することは明らかに機能します。

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

その間何もしなかった

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

私に必要なものを与えた。 ????

男らしさは一重引用符と二重引用符の間に差がないと思いましたか? ? ?

まあ、私が仕事を続けることができる限り...もう一度Yurijに感謝します。

関連情報