小编Chr*_*der的帖子

如何跳过替换每行中第一次出现的字符?

我有一些格式的文件

Y15-SUB-B04-P17-BK_M02734_4_000000000-ANNUF_1_1111_24724_4878;size=1;
Y15-SUB-B05-P22-LM_M02734_4_000000000-ANNUF_1_1111_20624_14973;size=1;
Y15-SUB-B05-P22-LM_M02734_4_000000000-ANNUF_1_1103_11326_10379;size=1;
Run Code Online (Sandbox Code Playgroud)

我希望用冒号 (:) 替换每个出现的下划线 (_),除了第一个。我想要这样的输出:

Y15-SUB-B04-P17-BK_M02734:4:000000000-ANNUF:1:1111:24724:4878;size=1;
Y15-SUB-B05-P22-LM_M02734:4:000000000-ANNUF:1:1111:20624:14973;size=1;
Y15-SUB-B05-P22-LM_M02734:4:000000000-ANNUF:1:1103:11326:10379;size=1;
Run Code Online (Sandbox Code Playgroud)

我知道我可以sed -i '' 's/_/:/g' old_file用来替换 ALL(或sed 's/_/:/g' old_file > new_file),并且我可以添加数字来仅替换第 2 次、第 4 次左右的出现:

sed 's/_/:/2' old_file > new_file
Run Code Online (Sandbox Code Playgroud)

但是如何替换每行上的每个出现但第一次出现?

sed text-processing

10
推荐指数
5
解决办法
1967
查看次数

用 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_
Run Code Online (Sandbox Code Playgroud)

我需要替换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])
Run Code Online (Sandbox Code Playgroud)

或者sed据说是 mac

find

 find . -type f -name test.txt | xargs sed -i ""
 "s/Y16_TUL_SUB_/Y16-TUL-SUB-/g'
Run Code Online (Sandbox Code Playgroud)

sed

 sed -i -e "s/Y16_TUL_SUB_/Y16-TUL-SUB/g" test.txt
Run Code Online (Sandbox Code Playgroud)

或者 awk …

sed awk text-processing macos

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

sed ×2

text-processing ×2

awk ×1

macos ×1