Unix - 如何在Unix中将sed命令的输出传递/传递给ls命令

时间:2017-09-19 10:21:03

标签: unix sed ls

我可以使用以下命令确定输入文件的大小:

ls -l employee.txt | awk '{print $5}'

这将仅打印文件大小。

我可以打印文件的内容,忽略文件的第一行和最后一行(指标题和预告片)。以下命令对我有用:

sed '1d;$d' employee.txt

但是如何以这样的方式组合这两个命令,它应该确定忽略标题和尾部的文件的大小。同时,不应从输入文件中删除标题和预告片。

我能够通过编写两个语句来实现这一点。一个是将整个文件复制到除头文件和预告片之外的新文件中,然后在新文件上执行ls,如下所示:

sed '1d;$d' employee.txt > employee1.txt

ls -l employee1.txt

我尝试在下面的单个声明中进行,但无济于事。任何输入都会有所帮助。

sed '1d;$d' employee.txt | ls -l employee.txt

ls -l `sed '1d;$d' employee.txt`

sed '1d;$d' employee.txt |xargs ls -l $1

3 个答案:

答案 0 :(得分:2)

Don't parse ls获取文件大小。要获取磁盘上文件的大小,请使用stat -c '%s' filename,或者要获取字符流的大小,请使用wc -c

# size of employee.txt
stat -c '%s' employee.txt

# size without header and footer
sed '1d;$d' employee.txt | wc -c

答案 1 :(得分:0)

你可以通过

完成
cat someFilename.txt | wc -c

第一个命令输出文件的内容,第二个命令计算输入的大小。

这不会删除标题和预告片。为此你可以像以前一样使用'sed'命令。

答案 2 :(得分:0)

我认为你以错误的方式接近这个。

我的建议:使用" stat"查询总文件大小命令:

stat --format=%s employee.txt 

您可以将结果存储在这样的变量中(假设您正在运行Bash shell):

fileSize="$(stat --format=%s employee.txt)"

现在你检索第一行(再次假设Bash shell):

firstLine="$(head -n 1 employee.txt)"

接下来检索最后一行(再次假设Bash shell):

lastLine="$(tail -n 1 employee.txt)"

现在计算第一行和最后一行的大小,并从文件大小中减去它:

echo "Total adjusted size is:" $((fileSize - ${#firstLine} - ${#lastLine}))