【问题标题】:How to remove ˆM chars?如何删除 ^M 字符?
【发布时间】:2011-03-01 16:01:33
【问题描述】:

我有一个从 Windows 生成的文件,我必须将其粘贴到 linux 下的脚本中。 我的脚本工作正常,除了在每一行的末尾我得到一个 ^M 字符。

如何使用 bash 删除它?

目前我的脚本是:

#/bin/bash
IFS=$'\n'
for CUSTOMER in `cat exp.csv`
do
    echo $CUSTOMER
done

【问题讨论】:

    标签: windows bash cat


    【解决方案1】:

    ^M 应该是 windows 换行符 \r,因此您只需删除所有 \r 你可以使用 tr 工具来实现这一点,你可以从你的 bash 脚本中调用它,这是来自维基百科文章(我没有验证它):

    tr -d '\r' < inputfile > outputfile
    

    因此,从 bash 来看应该是这样的

    VAR=`echo -n $CUSTOMER | tr -d '\r'`
    

    【讨论】:

      【解决方案2】:

      在进一步处理之前,请在exp.csv 上致电dos2unix

      【讨论】:

      • 如果您在 Linux 中操作 Windows 文件,dos2unix 应该是您想要的。
      【解决方案3】:

      我经常使用tr 来做这件事。 CR 字符是八进制的 013:

      tr -d '\013' < $FILE
      

      所以在你的循环中,那就是

      for CUSTOMER in `tr -d '\013' < exp.csv`
      

      【讨论】:

        【解决方案4】:

        文件上的dos2unix命令

        【讨论】:

          【解决方案5】:

          有几种方法可以从您的文件中删除错误的char M

          1. 使用命令dos2unix file_name

          2. 在 vi 编辑器中打开文件,转到 命令模式并输入:%s/ctrl+v ctrl+m//g 这将删除所有坏的 你文件中的字符。现在使用:wq 保存并退出

          3. sed -e "s/^M//" filename(exist file name) &gt; newfilename(new name)

            sed -e "s/^M//" 文件名(已有文件名) > newfilename(新文件名)

          注意:要在 unix 服务器上查找所有 java 文件的错误字符,请点击以下命令

          find . -name "*.java*"  -type f | xargs grep -l ^M *
          

          同样,您可以对所有类型的文件使用 "*.*" 而不是 "*.java"

          【讨论】:

            猜你喜欢
            • 2012-08-04
            • 2022-08-18
            • 1970-01-01
            • 2023-03-17
            • 1970-01-01
            • 2023-03-10
            • 1970-01-01
            • 2022-07-16
            • 2013-10-24
            相关资源
            最近更新 更多