regex修剪管道分隔符



我有一个管道分隔的文件,如下所示:

123| ste hen| 456| out put 
143 | ste hen| 456| out put

我想删除空格--类似于这个

123,ste hen,456,out put
143,ste hen,456,out put

这是我的代码,但不起作用。。

awk '{gsub(/^ +| +$/,"|"); gsub(/ *, */,"|")}1'  test2.txt

我会按照以下方式使用GNUAWK,让file.txt的内容是

123| ste hen| 456| out put 
143 | ste hen| 456| out put

然后

awk '{gsub(/ *| */,",");print}' file.txt

输出

123,ste hen,456,out put 
143,ste hen,456,out put

{gsub(/^ +| +$/,"|"); gsub(/ *, */,"|")}1相比所做的更改

  • 消除^,即开始
  • 消除$即结束
  • 转义|,因为您需要文字|而不是替代
  • 在每个|周围寻找零个或多个(*(空间,而不是在每一侧寻找至少1个空间
  • 将两个gsub替换为一个
  • 通过print而不是1触发打印(风格问题,请参阅您所在组织的风格指南,以使用适合您情况的解决方案(

(在第4.2.1项中测试(

我的第一个快速方法是下一个:

cat testFile.txt | sed 's/|/,/g' | sed 's/s*,s*/,/g''

过去的命令显示以下结果:

123,ste hen,456,out put 
143,ste hen,456,out put

来自以下输入:

123| ste hen| 456| out put 
143 | ste hen| 456| out put

sed解决方案:

sed 's/^ *//; s/ *$//; s/ *| */,/g' file

awk'{gsub(/*|*/,"|";print}'test2.txt

最新更新