使用Sed删除不在字母之间的空格

时间:2017-09-30 17:21:31

标签: regex sed

昨天我发现了Sed,这太棒了。我可以处理某些简单的正则表达式和文字,但我不确定如何只删除不在两个字母之间的空格(a-zA-Z)。

例如:

输入:

"Mal                        ","","Mr    ","123","  ","   Lauren Hills","Dr  ","  ","      ","        ",

输出:

"Mal","","Mr","123","","Lauren Hills","Dr","","","",

到目前为止,我已尝试调整我发现hereherehere的命令。

我最接近的是:

sed 's/ \{1,\}//g' test.csv > test.bak

删除了单词之间的重要空格,例如LaurenHills之间的空格。

5 个答案:

答案 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","","","",