修改ls命令

时间:2017-05-10 08:59:50

标签: bash

我正在修改ls命令的输出。我已经实现了我想要的所有代码,但我觉得它可以在很多方面得到很多改进,所以我想问你对它的意见。我会解释每个命令,所以你一定知道我想用它做什么。

以下是我的长行代码:

ls -l |
sed 's/total/                                            C FILES.c/' | 
cut -b 45-100 | 
grep -e "\.c" | 
sed 's/C FILES.C/\nC FILES\n/' |
sed 's/[0-9]//' |
sed 's/[0-9]//' | 
sed 's/[0-9]//'

Result

  1. ls -l显示“total:”+一个数字,然后每行显示1个文件。

  2. sed 's/total/' C FILES.c/这个很长的部分应该用标题替换“total”行,正如你将在下一个命令中看到的那样,我不得不这样缩进,所以它在与ls -r显示的文件名相同的行。数字将在后一个命令中处理。

  3. cut -b 45-100会删除文件名前的所有内容。正如我在最后一个命令中在“C FILES.C”之前放置了45个空格,它将剪切它们并仅显示55个下一个字符。 (55足够大,可以包含我使用的任何文件名。)

  4. grep -e "\.c"删除不以.c结尾的文件。由于标题C FILES不是c文件,我必须使用.c后缀编写它,因此在使用grep命令时它不会消失。

  5. sed 's/C FILES.C/\nC FILES\n/'删除.c后缀并添加一些换行符以分隔命令行,标题和文件列表。

  6. 第二个命令被“C FILES”标题替换为“total”。但它没有取代“总数”之后的数字,所以这个数字仍在这里,我想摆脱它。该命令不知道它必须删除的是什么号码,它可以是1,45甚至666.我使用命令sed 's/[0-9]//的3次删除3到0到9之间的数字(如果有的话)一个,否则它什么都不做)。如果数字的长度高于3,仍然会有一些数字,但我认为我总共不会超过999,所以重复3次这个命令就足够了。我尝试了's/[0-9][0-9][0-9]//,但只有在数字的长度至少为3时才有效。否则,它什么也没做。

  7. 这是我能做的最好的事情。我试图在没有选项的情况下使用ls命令,但之后没有以下命令运行良好,我不知道如何输出标题,因为没有要替换的行。

    欢迎任何关于如何让它更好更容易阅读的想法或建议。

2 个答案:

答案 0 :(得分:1)

如果不知道您的确切预期输出(请提供),我的感觉是您可以用以下内容替换所有内容:

 echo C FILES; ls -1 *.c

对我而言:

C FILES
foo.c
norm.c
readfile.c
size.c
thr.c

这是您正在寻找的输出吗?如果没有,那是什么?

答案 1 :(得分:0)

我觉得我会做的事情看起来你做的事情感觉相当简单但据我所知,你想简单地列出标题为“C Files”的c文件?

如果我是对的,为什么不做这样的事情:

echo "C Files" && ls *.c

如果你想要一个更“管道”的格式:

ls *.c | cat <(echo "C Files") -

然后可以将第二个变体以完全相同的格式发送到文件:

ls *.c | cat <(echo "C Files") - > output.txt

要获得相同的输出但重新排序命令输入:

cat <(echo "C Files") <<< cat <(ls *.c)