替换X量的未知数量的空格

时间:2016-03-28 21:01:13

标签: linux bash shell

嘿所以我正在写一个linux脚本,我发现了一个有趣的发现。

我有一个命令,它会根据它的大小对目录中的文件进行排序,并打印出最大的文件。命令如下

find . -type f -ls | sort -r -n -k7 | head -n 1

这将在

之类的内容中打印出来

895918591 8 -r-w-x 1 user01 xdf 1931 28 march 23:21 ./myscript.sh

所以我想单独获取最大的文件大小并打印出来。为了将它分开,我使用cut -d' ' -f2问题,这只留下空输出。那是因为空间量不一致。

所以我尝试做这样的事情

find . -type f -ls | sort -r -n -k7 | head -n 1 | tr -d [:blank:] | cut -d' ' -f2

问题是,这将删除所有空格,现在我无法通过公共分隔符将它们分开。所以我问,有没有办法替换所有空格,然后用一个空格替换它们?

如果不是,至少可以通过其他方式获得该字节数?

6 个答案:

答案 0 :(得分:1)

您可以使用cut代替awk

find . -type f -ls | sort -r -n -k7 | head -n 1 | awk '{print $2}'

但是,您甚至可以使用head

来避免使用awk
find . -type f -ls | sort -r -n -k7 | awk '{print $2; exit}'

答案 1 :(得分:1)

Sed和Awk是这类工具的绝佳工具。 Sed是一种基于正则表达式的语言,它修改了Sed程序接收的每一行的内容,而Awk也是一个面向行的工具,可以自动将其输入拆分为字段。

在Sed中将空白序列转换成一个空格(用/\s+/替换的所有匹配项):

$ find ... | sed 's/\s+/ /g'

只打印Awk中每行的第一个“单词”(非空格序列):

$ find ... | awk '{print $1}'

http://tldp.org/LDP/abs/html/sedawk.html可以帮助您开始使用这些语言。

答案 2 :(得分:1)

将多个空格转换为一个空格的工具称为tr -s

  • tr翻译
  • s挤压

样品:

$ cat a
hello    this is     a sample   text   with     multiple   spaces
$ tr -s " " < a
hello this is a sample text with multiple spaces

如果您想将每个空格转换为X,只需输入sed 's/ / /g'

答案 3 :(得分:1)

我认为你已经过度思考了眼前的问题:

find -type f -printf "%s\n"|sort -n|tail -n1

答案 4 :(得分:0)

您可以尝试使用printf命令来控制显示器

,而不是使用剪切
stringSTO : IsStrictTotalOrder _ _
stringSTO = StrictTotalOrder.isStrictTotalOrder String.strictTotalOrder

open Data.AVL.Sets (RawIso-IsStrictTotalOrder rawIso stringSTO)

答案 5 :(得分:0)

你做错了。

以任何形式解析ls(例如find的{​​{1}}选项)是不好的做法。

不要使用-ls输出。 ls是用于交互式查看目录元数据的工具。任何使用代码解析ls输出的尝试都会被破坏。

我强烈建议您进一步阅读有关此主题的内容。阅读Parsing ls

相反,请使用以下函数:

ls