1

我编写了一个 shell 脚本来解析一些文件,grep并在后续命令中使用结果。

源代码的相关部分是

VERSION=`grep "^Stable tag:" readme.md | awk -F' ' '{print $NF}'`
echo $VERSION
echo "Readme file version is $VERSION is it correct"

readme.md 文件中的相关行是

Stable tag: 2.2.2

你会期望输出

2.2.2
Readme file version is 2.2.2 is it correct

但我得到以下输出

2.2.2
 is it correctrsion is 2.2.2

我很确定在我的文本文件的行尾没有(不可打印或非 ascii)字符。:set invlist我通过在 vim 中启用命令来检查它。

知道为什么会这样吗?或任何其他想法来调试此问题?

4

1 回答 1

2

这看起来像一个 DOS 编辑的文件,而你在一个类似 Unix 的系统上工作。去掉回车符 (Ctrl-M)。

你可以tr(1)用来删除那些:

VERSION=`grep "^Stable tag:" readme.md | tr -d '\015' | awk -F' ' '{print $NF}'`

awk 可能还有一些内置功能可以处理这些,但我对 awk 的了解还不够。

于 2012-12-21T13:38:06.020 回答