问题:我需要删除EOL / ^ M / Ctrl-M,它来自在Windows / Dos中编写文档并在Unix中打开它。
目标:我需要读取一个文件并将读取字符串分配给变量,以便我可以将小字符串用作路径名的一部分。我已经阅读了许多关于打开VIM的帖子,但是,这需要通过SOURCED BASH SCRIPT完成,将在多台机器上运行,并且有许多环境变量。所有代码都需要是本机的,因此,没有dos2unix或类似的东西。我还为sed,perl和awk尝试了几行代码;但是,我没有多少运气。任何帮助都会很棒 从终端执行源脚本的示例:
username#: . ./Do_something.sh some_string > ~/Do_something_log.txt
让我们假设我们在Do_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,因此无法在分配给TOTAL_PATH的变量末尾标记.cfg扩展名。我只注意到^ M,因为我使用
从终端执行的更少 username#: less ~/Do_something_log.txt
我正在寻找最有效的方法从脚本中删除这些(EOL / ^ M / Ctrl-M)。
由于
答案 0 :(得分:0)
使用Bash substring replacement,
${var/%find/replace}
%
要求find
值位于字符串的末尾。
NEW_PATH_VARIABLE=${line/%$'\r'/}
$'\r'
搜索可以替换为 Ctrl - V Ctrl - M 序列如果需要的话。