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
。
答え2
奇妙な。 「を」に変更することは明らかに機能します。
sed -i '' "s/as/replaced_ad/g" test.txt
その間何もしなかった
sed -i '' 's/as/replaced_ad/g' test.txt
私に必要なものを与えた。 ????
男らしさは一重引用符と二重引用符の間に差がないと思いましたか? ? ?
まあ、私が仕事を続けることができる限り...もう一度Yurijに感謝します。