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

Unix - How do you pass / pipe the output of a sed command to a ls command in Unix

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

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

这将只打印文件大小。

而且我能够忽略文件的第一行和最后一行(指的是 header 和结尾)来打印文件的内容。下面的命令对我有用:

sed '1d;$d' employee.txt

但是如何将这两个命令结合起来,从而确定忽略 header 和尾部的文件大小。同时,不应从输入文件中删除 header 和预告片。

我可以通过编写两个语句来实现这一点。一种是将整个文件复制到一个新文件中,除了 header 和预告片,然后对新文件执行 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 

你可以通过

cat someFilename.txt | wc -c

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

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

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

我认为您的处理方式有误。

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

stat --format=%s employee.txt 

您可以将结果存储在这样的变量中(假设您是 运行 a 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}))