alr*_*lrz 9 sed text-processing
我有一个文本文件如下:
test1,test2,test3
test4,test5
test6,test7,test8,test9,test10
test11,test12,test13,test14
Run Code Online (Sandbox Code Playgroud)
如何用分号替换逗号, 从第二个开始(并继续到最后一个)?
我想得到如下输出:
test1,test2;test3
test4,test5
test6,test7;test8;test9;test10
test11,test12;test13;test14
Run Code Online (Sandbox Code Playgroud)
Rah*_*hul 14
这可以做到这一点,
$ sed -e 's/,/;/g' -e 's/;/,/1' infile
test1,test2;test3
test4,test5
test6,test7;test8;test9;test10
test11,test12;test13;test14
Run Code Online (Sandbox Code Playgroud)
解释
s/,/;/g替换所有出现的,with;
s/;/,/1替换第一次出现的;with,
如果你有 GNU sed,你也可以试试这个简单方便的,
sed 's/,/;/2g' infile
Run Code Online (Sandbox Code Playgroud)
如果输入中可能已经有分号,我们必须小心:
$ sed 's/,/\n/g; s/\n/,/; s/\n/;/g' input
test1,test2;test3
test4,test5
test6,test7;test8;test9;test10
test11,test12;test13;test14
Run Code Online (Sandbox Code Playgroud)
由于 sed 是逐行读取输入的,因此正常输入中不会有换行符。所以,我们可以用换行符替换所有的逗号,我们知道不会有任何混淆。接下来我们将第一个换行符恢复为逗号。最后,我们用分号替换所有剩余的换行符。
更详细地:
s/,/\n/g 用换行符替换所有逗号。
s/\n/,/ 用逗号替换第一个换行符。
s/\n/;/g 用分号替换所有剩余的换行符。