输入文件:带标题日期和预告片计数的ankit.txt
H2014-12-02
12ASDF23 FGHJ HJKL
123ASD23 FGHJ HJKL
123ASD23 FGHJ HJKL
123ASD23 FGHJ HJKL
T000004
我想要没有标题和预告片的数据。
命令:
head -n -1 ankit.txt | tail -n +2 >output
shell脚本中的
echo `head -n -1 ankit.txt | tail -n +2` >output
Iutput:
12ASDF23 FGHJ HJKL 123ASD23 FGHJ HJKL 123ASD23 FGHJ HJKL 123ASD23 FGHJ HJKL
输出单行...(我不想要)
我尝试在shell脚本中简单地给出了cat命令,但显示的dadata也是单行
我在shell脚本中尝试了没有echo的相同命令。
即使我保留1个命令来通过shell脚本显示输出:
cat ankit.txt
输出是一行。 wc -l给出了正确的计数,但是一个简单的cp也提供了单行输出。
cp ankit.txt output
答案 0 :(得分:4)
使用
echo `command`
不仅浪费,它还会在command
的输出上执行空格拆分和全局扩展,然后再将其传递给echo
。通常你只想要
command
或者如果您坚持要进行流程替换,并期望保留其输出,请将其放在双引号中:
echo "$(command)"
(另请注意,切换到现代推荐的流程替换语法。)
但实际上,你为什么要这样?如果你真的这样做,那还不是更好吗
echo "$(echo "$(echo "$(echo "$(echo ...
答案 1 :(得分:0)
看起来你已经获得了Windows行结尾。你有两个选择。预处理输入文件以获得UNIX结尾:
dos2unix ankit.txt
或者将其作为管道的一部分:
dos2unix < ankit.txt | head -n -1 | tail -n +2 > output
请注意dos2unix
有两种模式。在第一种情况下,它将获取输入文件并使用UNIX行结尾重写它(这是预处理的理想选择)。在第二个中,它将从stdin读取并将新输出写入stdout(这是管道的理想选择)。