我有几个问题:
我已列出 /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
)按照您的要求清除该行的部分,但是如果/
字符之间没有特定且常规的字节计数,您可能不会有太多用处。当然,无论如何,最后的命令应该处理这个问题。