【发布时间】:2015-11-18 14:38:20
【问题描述】:
我有一个这样的示例文件
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'
并得到这个解决方案。它适用于 field-end 而不是 field-begin。
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 -re 's/( ;|; )/;/g' file,它会寻找第一个模式。我认为问题在于这两种模式有一个交集,所以它要么抓住一个,要么抓住另一个 -
我试过了 sed -re 's/( ;)|(; )/;/g' 等等 sed -re 's/( ;)|; )/;/g' 但两种方式都行不通。
-
我的问题是,有效 -r - 正则表达式的选项正确
标签: regex linux shell sed data-manipulation