我有这样的样本文件
word1 ; word2 ; word3 ; word4 ; word5 ; word6 ; word7
word1 ; word2 ; word3 ; word4 ; word5 ; word6 ; word7
word1 ; word2 ; word3 ; word4 ; word5 ; word6 ; word7
word1 ; word2 ; word3 ; word4 ; word5 ; word6 ; word7
现在我要删除&#34 ;;"周围的空白。我必须使用sed。
决赛解决方案
word1;word2;word3;word4;word5;word6;word7
word1;word2;word3;word4;word5;word6;word7
word1;word2;word3;word4;word5;word6;word7
word1;word2;word3;word4;word5;word6;word7
我使用了这个声明,这适用于&#34 ;;"。
cat testdata.csv | sed -r 's/ ?; ?/;/g'
但是我第一次尝试这种方式
cat testdata.csv | sed -r 's/( ;|; )/;/g'
并获得此解决方案。它适用于现场结束,而不适用于现场开始。
word1; word2; word3; word4; word5; word6; word7
word1; word2; word3; word4; word5; word6; word7
word1; word2; word3; word4; word5; word6; word7
word1; word2; word3; word4; word5; word6; word7
我的sed声明是错误的还是可以使用" |"正则表达式?
答案 0 :(得分:3)
问题是分号后跟的空格是匹配模式( ;
的第一部分,然后sed继续到下一个字符,这只是一个空格(所以不匹配模式的一部分,并没有被替换。)
一种选择是将正则表达式更改为:
sed 's/ *; */;/g'
这一次消耗两个可选空格。
答案 1 :(得分:2)
与 ;
匹配后,解析器已使用;
,并且不会使用它来匹配;
。