如何在文本文件中的所有分隔符后修剪尾随空格

时间:2014-08-21 05:35:49

标签: regex perl unix awk sed

需要帮助删除文本文件中所有分隔符后的尾随空格 我有下面数据的文本文件。 例如

            ADDRESS_ID|         COUNTRY_TP_CD|       RESIDENCE_TP_CD|      PROV_STATE_TP_CD|ADDR_LINE_ONE|P_ADDR_LINE_ONE
  885637959852960985.0|                  76.0|||169 Park lane||Scottish||lane||KU|||||||2013-09-19 14:48:49.609000|

我想在分隔符和单词的第一个字母后删除空格。 任何可以执行相同操作的正则表达式或unix脚本。寻找输出如下:

ADDRESS_ID|COUNTRY_TP_CD|RESIDENCE_TP_CD|PROV_STATE_TP_CD|ADDR_LINE_ONE|P_ADDR_LINE_ONE
885637959852960985.0|76.0|||169 Park lane||Scottish||lane||KU||||||2013-09-19 14:48:49.609000|

任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:2)

awk 'BEGIN{FS=OFS="|"} {for (i=1;i<=NF;i++) gsub(/^[[:space:]]+|[[:space:]]+$/,"",$i)} 1' file

答案 1 :(得分:1)

使用perl one-liner去除每个字段周围的间距。假设没有嵌入分隔符:

perl -i -lpe 's/\s*([^|]*?)\s*/$1/g' file.txt

切换

  • -i:编辑<>个文件(如果提供了扩展程序,则进行备份)
  • -l:启用行结束处理
  • -p:为输入文件中的每个“行”创建一个while(<>){...; print}循环。
  • -e:告诉perl在命令行上执行代码。

答案 2 :(得分:0)

下面的perl代码将删除行开头处的空格或分隔符|之后的空格,

$ perl -pe 's/(?<=\|) +|^ +//g' file
ADDRESS_ID|COUNTRY_TP_CD|RESIDENCE_TP_CD|PROV_STATE_TP_CD|ADDR_LINE_ONE|P_ADDR_LINE_ONE
885637959852960985.0|76.0|||169 Park lane||Scottish||lane||KU|||||||2013-09-19 14:48:49.609000|

要保存对该文件所做的更改,

perl -i -pe 's/(?<=\|) +|^ +//g' file

答案 3 :(得分:0)

sed 's/\ //g' input.txt > output.txt

答案 4 :(得分:0)

使用sed

sed -r -e 's/(^|\|)\s+/\1/g' -e 's/\s+$//' filename

在第一个表达式中:

  • (^|\|)匹配行的开头或|字符,并将其保存在捕获组1中。
  • \s+在此之后匹配一系列空格字符。
  • 替换\1替换捕获组1,因此这将删除行开头和分隔符后的空格。
  • g修饰符使其对该行中的所有匹配项进行操作。

在第二个表达式中:

  • \s+再次匹配空白序列
  • $匹配行尾
  • 替换用空字符串替换整个事物,这会删除尾随空格。

答案 5 :(得分:0)

for posix sed(对于GNU sed add --posix)     sed&#39; s / ^ [[:space:]] //; s / | [[:space:]] / | / g&#39; YourFile

在sed regex posix版本中使用2替换(没有OR(|))

  1. 通过替换空格(^[[:space:]]*)删除空格
  2. 来删除起始空格
  3. 用管道
  4. 替换任何空间(|[[:space:]]*)以外的任何序列管道 如果文本只有空格(ASCII 32)char

    ,那么

    [[:space:]]可以替换为单个空格char