倒数和列出+高级功能

倒数和列出+高级功能

我有几个问题:

我已列出 /group/book/four/word 中文件的行数,按它们包含的行数排序

$ wc -l /group/book/four/word/*|sort -n

...我得到了:

2 /group/book/four/word/wer.txt
2 /group/book/four/word/rti.txt
3 /group/book/four/word/cool.txt

这就是我想要的!完美的。

但现在我想让生成的列表仅包含文件名,例如像这样

wer.txt
rti.txt
cool.txt

我怎样才能使用“od”命令来做到这一点?

如何使用“sed”删除上面得到的结果行开头的数字?我怎样才能做同样的事情,但只针对前两行?

答案1

您将获得具有路径名扩展的文件列表:

cd /group/book/four/word
echo *
# or into a file
echo * >/path/to/filelist.txt

您可以使用以下命令删除一行中从开头到(包括)第一个空格(或一组空格)的所有内容sed

sed 's/^[^ ]  *//g'

我不明白od这有什么关系。

sed可以限制为前两行,例如让它在第三行退出:

sed -e 3d -e 's/^[^ ]  *//g'

答案2

我会sed在之后直接放入sort并让它w一次性写出您想要的所有文件:

wc -l /group/book/four/word/*|sort -n | 
sed 'w ./not_as_yet_touched.txt
 1,2s/^[0-9 ]*//w ./first_two_lines_without_line_numbers_or_leading_spaces.txt
    s|.*/||w ./everything_up_to_first_slash_trimmed.txt'

正如所写,sed仍然会自动打印运行上述所有命令的结果,但结果显示在终端上(或无论stdout去哪里)只会忠实地反映最后一个文件的内容。另外两个是在行周期w的不同时间写入的,因此它们的内容会有所不同。sed

不过od……嗯……od并不是真的划界数据就这么多倾倒它。您可以od与其他过滤器结合使用(例如sed按照您的要求清除该行的部分,但是如果/字符之间没有特定且常规的字节计数,您可能不会有太多用处。当然,无论如何,最后的命令应该处理这个问题。

相关内容