昨天我发现了Sed,这太棒了。我可以处理某些简单的正则表达式和文字,但我不确定如何只删除不在两个字母之间的空格(a-zA-Z)。
例如:
输入:
"Mal ","","Mr ","123"," "," Lauren Hills","Dr "," "," "," ",
输出:
"Mal","","Mr","123","","Lauren Hills","Dr","","","",
到目前为止,我已尝试调整我发现here,here和here的命令。
我最接近的是:
sed 's/ \{1,\}//g' test.csv > test.bak
删除了单词之间的重要空格,例如Lauren
和Hills
之间的空格。
答案 0 :(得分:4)
Perl比sed更容易:
perl -pe 's/\B | \B//g' < input > output
\B
代表&#34;不代表字边界&#34;,即它不会删除前后字母的空格。
答案 1 :(得分:1)
在模式中添加"
sed -e 's/ \{1,\}"/"/g' -e 's/" \{1,\}/"/g' test.csv > test.bak
<强>解释强>:
-e
选项用于应用多个sed
操作
第一部分用一个"
替换一个或多个空格字符和一个"
。
第二部分用"
替换"
和一个或多个空格字符
因此,它删除了引号内的前导和尾随空格。
答案 2 :(得分:1)
分三步完成。当左边的字符是字母而右边的字符不是时,删除空格,下一步则相反,最后一步当两个字母都不是字母时删除空格。当两个周围的字符都是字母时,我们不能删除的唯一组合。
sed -e 's/\([a-z]\) \{1,\}\([^a-z]\)/\1\2/ig' -e 's/\([^a-z]\) \{1,\}\([a-z]\)/\1\2/ig' -e 's/\([^a-z]\) \{1,\}\([^a-z]\)/\1\2/ig' test.csv > test.bak
答案 3 :(得分:1)
你也可以使用这个。
sed 's/" */"/g;s/ *"/"/g'
答案 4 :(得分:0)
$ sed 's/ *" */"/g' file
"Mal","","Mr","123","","Lauren Hills","Dr","","","",