【发布时间】:2010-02-11 19:32:41
【问题描述】:
举个例子:
$ du -h file_size.txt
112K file_size.txt
如何从 du -h 的输出中删除文件名
我曾尝试使用 sed 搜索字符串(文件名)并将其替换为空,但没有成功(下面的命令)
du -h file_size.txt | sed 's/ 'file_size.txt'//'
有人可以指出为什么这不起作用,或者可能是更好的方法吗?
问候
保罗
【问题讨论】:
举个例子:
$ du -h file_size.txt
112K file_size.txt
如何从 du -h 的输出中删除文件名
我曾尝试使用 sed 搜索字符串(文件名)并将其替换为空,但没有成功(下面的命令)
du -h file_size.txt | sed 's/ 'file_size.txt'//'
有人可以指出为什么这不起作用,或者可能是更好的方法吗?
问候
保罗
【问题讨论】:
您在该命令行中有一些错误的引用。最简单的大概是:
du -h file_size.txt | cut -f -1
修复你的命令行:
du -h file_size.txt | sed 's/file_size.txt//'
因为你的帖子有一个awk 标签:
du -h file_size.txt | awk '{ print $1 }'
【讨论】:
du -h file_size.txt | sed 's/\s+.*//'
sed - 肯定比输入两次文件名要好。
sed "s/${VARIABLE}//"
du -h file_size.txt | cut -f1
【讨论】:
简单输出第一列。这是awk的解决方案
du -h test.txt | awk '{ print $1 }'
【讨论】:
这有点冗长,但无论如何,这是你想要的另一种方式:
du -h file_size.txt |while read x junk; do echo $x; done
【讨论】:
@OP 如果您的数据具有不同的字段,例如空格/制表符,那么使用 awk/cut 之类的工具通过分隔符在这些字段上拆分它们更容易。不需要使用正则表达式(例如 sed )。更好的是只使用外壳。
各种方式
$ du -h file | awk '{print $1}'
4.0K
$ du -h file | cut -f1
4.0K
$ set -- $(du -h file) #using shell only
$ echo $1
4.0K
【讨论】:
除了在 sed 正则表达式中包含一个空格并且 du 输出选项卡之外,您的原始命令本来可以工作。
【讨论】:
du -h 的输出是 [tab] 分隔的。
du -h file_size.txt |sed 's/[\t].*//g'
【讨论】: