我需要替换 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。