我有一个文本文件1.grep
grep -P -e "^<job.+type.+rule" "Emake-4agents-1st-10-25-51.53.xml"
为了让我的grepping更快,我在bash
cat 1.grep | bash > 1.search
这通常正常,但在这种情况下,我得到以下内容:
$ cat 1.grep
grep -P -e "^<job.+type.+rule" "Emake-4agents-1st-10-25-51.53.xml"
$ cat 1.grep | bash > 2.search
: No such file or directory25-51.53.xml
为什么bash
认为我的.xml
文件名是目录?
答案 0 :(得分:2)
当前的问题是文件1.grep是DOS / Windows格式,并且在行尾有一个回车符后跟换行符。 Windows将这两个字符组合视为行尾标记,但是bash
(以及grep
和...)等unix工具只会将换行视为行尾标记,因此回车被视为生产线的一部分。因此,它试图从名为“Emake-4agents-1st-10-25-51.53.xml ^ M”(其中^M
表示回车)的文件中读取,该文件不存在,因此它在中间打印一个带回车符的错误消息:
cat: Emake-4agents-1st-10-25-51.53.xml^M
: No such file or directory
...回车使第二部分覆盖第一部分,给出你看到的神秘结果。
解决方案:使用dos2unix
之类的内容将文件转换为unix(仅限换行)格式,并使用以unix格式存储的文本编辑器。
但是,我还必须同意几条评论说使用cat | bash
是......简单的奇怪。我不确定你想要在更大的范围内完成什么,但我无法想到任何情况下这是“正确”的方式。