这是我的谷歌csv联系人(包含超过1000个联系人)的输出:
A-Tech Computers Hardware,A-Tech Computers,,Hardware,,,,,,,,,,,,,,,,,,,,Low,,,* My Contacts,,,,,,,,,Home,+38733236313,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
我需要一个linux cli命令来替换重复的逗号,使用单个逗号,所以我明白了:
A-Tech Computers Hardware,A-Tech Computers,Hardware,Low,* My Contacts,Home,+38733236313,
我在记事本++中通常做的是用“,”六次替换“,,”。
我尝试过:
cat googlecontacts.txt | sed -e 's/,,/,/g' -e 's/,,/,/g' -e 's/,,/,/g' -e 's/,,/,/g' -e 's/,,/,/g' -e 's/,,/,/g' > google.txt
但它不起作用...... 但是,当我在较小的文件(两行)上尝试时,它可以工作...... :(
请帮忙!
答案 0 :(得分:2)
假设您的线路在修改后仍然符合要求(不是问题的关注点)
sed 's/,\{2,\}/,/g' googlecontacts.txt > google.txt
,
的任何出现位置的,
任意位置,
之间的任何空格都被视为正确的字段,因此未经修改在你的命令中,你需要递归改变角色而不是多次重复执行(总有一个gretear出现),
就像这样
cat googlecontacts.txt | sed ':a
# make your change
s/,,/,/g
# if change occur, retry once again by returning to line :a
t a' > google.txt
答案 1 :(得分:2)
您需要squeeze
的{{1}}选项:
tr
你可以这样看待它:
tr -s ',' < yourFile
答案 2 :(得分:1)
这可能适合你(GNU sed):
sed 's/,,*/,/g' file
或
sed 's/,\+/,/g' file
答案 3 :(得分:0)
感谢@potong,您的解决方案可以满足我的要求之一。我不得不更换|文件第一行中的符号,并使用此解决方案进行了少量更改。
sed -i "1s/|'*//g" ${filename}
我无法添加评论,因此想到将其发布为答案。请原谅