我有一个这样的示例文件
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。
最终的解决方案
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
我使用了这个语句,它适用于“;”。
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 语句是错误的还是 sed 不能与“|”一起工作正则表达式?
最佳答案
问题是分号后面的空格匹配模式的第一部分 ( ;
,然后 sed 继续到下一个字符,它只是一个空格(所以不匹配模式的任何一部分并且不会被替换)。
一种选择是将您的正则表达式更改为:
sed 's/ *; */;/g'
这一次消耗了两个可选空间。
关于regex - sed 中的正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33782863/