使用 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])

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

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。

相关内容