我编写了一个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)字符。我通过在vim中启用:set invlist
命令来检查它。
知道为什么会这样吗?或者调试此问题的任何其他想法?
答案 0 :(得分:2)
这看起来像DOS编辑的文件,你在类Unix系统上工作。剥去回车符(Ctrl-M)。
您可以使用tr(1)
删除这些内容:
VERSION=`grep "^Stable tag:" readme.md | tr -d '\015' | awk -F' ' '{print $NF}'`
awk可能还有一些内置功能可以解决这些问题,但我不知道awk足够了。