【问题标题】:how to trim trailing spaces after all delimiter in a text file如何在文本文件中的所有分隔符之后修剪尾随空格
【发布时间】:2014-10-14 15:33:13
【问题描述】:

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

            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|

任何帮助将不胜感激。

【问题讨论】:

    标签: regex perl unix awk sed


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

    【讨论】:

      【解决方案2】:

      下面的 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】:
        sed 's/\ //g' input.txt > output.txt
        

        【讨论】:

        • 这将替换所有空白字符,而不仅仅是字段开头/结尾的字符,并且不会替换制表符,并且不必要地转义空白。
        【解决方案4】:

        使用 perl 单行删除每个字段周围的间距。假设没有嵌入分隔符:

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

        开关

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

        【讨论】:

          【解决方案5】:

          sed:

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

          在第一个表达式中:

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

          在第二个表达式中:

          • \s+ 再次匹配一系列空格
          • $ 匹配行尾
          • 替换将整个内容替换为一个空字符串,这将删除尾随空格。

          【讨论】:

            【解决方案6】:

            对于 posix sed(对于 GNU sed 添加 --posix) sed 's/^[[:space:]]//;s/|[[:space:]]/|/g' YourFile

            使用 2 个替换(在 sed 正则表达式 posix 版本中没有 OR (|))

            1. 通过将起始空间 (^[[:space:]]*) 替换为空来删除起始空间
            2. 用管道替换任何序列管道而不是任何空格 (|[[:space:]]*)

            如果文本只有空格(ASCII 32)字符,[[:space:]] 可以替换为单个空格字符

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-03-17
              • 2010-11-26
              • 1970-01-01
              • 1970-01-01
              • 2020-10-31
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多