我有一个来自《命令行数据科学》一书的脚本,Jeroen Janssens 是这样
curl -s http://www.gutenberg.org/cache/epub/76/pg76.txt |
tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort |
uniq -c | sort -nr | head -n 10
并将其保存为top-world-1.sh
在 Ubuntu 15.10 64bit 的终端上,我输入了一个命令 ./top-words-1.sh
,得到了如下输出
./top-words-1.sh: line 1: $'\r': command not found
./top-words-1.sh: line 2: $'\r': command not found
我立刻猜想这是由多行引起的,于是我删除了 '\n' 个位置,这样就得到了这样的句子
curl -s http://www.gutenberg.org/cache/epub/76/pg76.txt |tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort |uniq -c | sort -nr | head -n 10
但我得到了
: invalid number of lines
我对编程 Bash 脚本完全陌生。您能给我一些建议吗?提前谢谢
根据以下评论,我有:
- 检查权限
- 添加到
#!/bin/bash
文件顶部并得到输出bash: ./top-words-1.sh: /bin/bash^M: bad interpreter: No such file or directory
- 使用 sudo 运行
答案1
它对我有用。尝试:
cat > script.sh <<EOF
#! /bin/bash
curl -s http://www.gutenberg.org/cache/epub/76/pg76.txt |tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort |uniq -c | sort -nr | head -n 10
EOF
chmod +x script.sh
./script.sh
它给了我正确的答案。请确保您没有向文件添加任何额外的(隐藏)字符。您还可以将命令复制/粘贴到 shell 中,以确保它适合您。
答案2
使用以下命令运行脚本:bash ./scriptname
,或者chmod +x script
然后:./scriptname
未找到命令可能意味着它不可执行。
答案3
我使用dos2unix
命令解决了我的问题。感谢@muru 的评论。原因由@steeldriver 解释。