如何从bash脚本中删除EOL/^M/Ctrl-M?

如何从bash脚本中删除EOL/^M/Ctrl-M?,bash,shell,unix,sed,Bash,Shell,Unix,Sed,问题:我需要删除在Windows/Dos中编写文档并在Unix中打开文档时产生的EOL/^M/Ctrl-M 目标:我需要读取一个文件并将读取的字符串分配给一个变量,这样我就可以使用小字符串作为路径名的一部分。我读过很多关于打开VIM的帖子,但是,这需要通过一个源代码的BASH脚本来完成,它将在多台机器上运行,并且有许多环境变量。所有代码都需要是本机代码,因此,没有dos2unix或类似的代码。我还为sed、perl和awk尝试了几行代码;然而,我运气不太好。任何帮助都会很好。 从终端执行源脚本的

问题:我需要删除在Windows/Dos中编写文档并在Unix中打开文档时产生的EOL/^M/Ctrl-M

目标:我需要读取一个文件并将读取的字符串分配给一个变量,这样我就可以使用小字符串作为路径名的一部分。我读过很多关于打开VIM的帖子,但是,这需要通过一个源代码的BASH脚本来完成,它将在多台机器上运行,并且有许多环境变量。所有代码都需要是本机代码,因此,没有dos2unix或类似的代码。我还为sed、perl和awk尝试了几行代码;然而,我运气不太好。任何帮助都会很好。
从终端执行源脚本的示例:

     username#: . ./Do_something.sh  some_string > ~/Do_something_log.txt
让我们假设里面有以下几行dou_something.sh

 #!/bin/bash
 some_string=$1 
 SOME_PATH="${ANOTHER_PATH}/Some/directory_name"
 FILE="${SOME_PATH}/an/even/longer/path/a_file.cfg"

 while read line
 do
      if [ ! -z "{line}" ] ; then
         NEW_PATH_VARIABLE=${line}
         TOTAL_PATH="${SOME_PATH}/${NEW_PATH_VARIABLE}.cfg"
         if [ ! -f "${TOTAL_PATH}" ] ; then
             echo "ERROR. FILE NOT FOUND!!!"
         fi
         if [ "${SOME_STRING}" = "${TOTAL_PATH}" ] ; then
             break
         fi
       fi
 done < ${ANOTHER_FILE}
我正在寻找从脚本中删除这些(EOL/^M/Ctrl-M)的最有效方法

谢谢

使用Bash

${var/%find/replace}

%
要求
find
值位于字符串的末尾

NEW_PATH_VARIABLE=${line/%$'\r'/}

如果需要,可以用Ctrl-V Ctrl-M序列替换
$'\r'
搜索。

对不起,罗伯,tr-d'^M'outfile您用
\r
尝试过吗?抱歉,上次的帖子有问题。
tr-d'^M'outfile
tr-d'\r'outfile
都不起作用(当然,在调整以下代码之后)。除此之外,这需要尽可能兼容。cat在Mac上似乎不可用。
tr-d'\015“newfile
在OSX上为我工作。这并不是说这个问题已经有成千上万的重复了。也许我错过了什么。但是我要删除的字符是^M。为什么建议使用“\r”?因此,我使用mac来编程这个脚本。知道如何获得Ctrl-V Ctrl-M序列字符吗?在终端窗口中,它是Ctrl-V Ctrl-M。我建议您使用字符串
$'\r'
,这样您就不会被控制字符所困扰。在Mac上的终端中,似乎ctrl-V ctrl-M只是插入了一个新行。)-:六羟甲基三聚氰胺六甲醚。。不是我的!?你用的是什么外壳?我是巴什。
NEW_PATH_VARIABLE=${line/%$'\r'/}