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
。たとえば、次のようになります。awk
python
#!/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])
それともsed
Macでも動作します。
または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
sed
OS 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
sed
OS Xでは、GNUとは少し異なりますsed
。 OS X端末で使ってみるとman sed
使い方がわかるだろうsed
。