我有一个名为 A.txt 的文件,我必须创建一个文件 B.txt,以便它在开头写入一些文本,旁边有一个管道符号,后面是文件 A 中的行数(这里有 10 行)示例),然后是文件 A 的内容。
注意:我必须在单行命令中尽可能轻松地完成此操作。
输出:
Some text | 10
(Contents of file A)
我尝试了这个(不包括管道符号)但没有用:
(echo 'Some Text';
sed -i 1,10d A.txt ;
wc -l A.txt ;cat A.txt)
>> B.txt
答案1
sed -i 1,10d A.txt
从 A.txt 中删除第 1 行到第 10 行但不打印任何内容。 cat
之后调用该文件(即使在同一个子 shell 中)将打印修改的文件的内容,而不是原始内容。
答案2
如果 中只有 10 行A.txt
,并且您使用 删除了这些行sed
,则以下内容cat A.txt
将没有输出,并且wc
将报告 0 行。
你可能想要这样的东西:
(
echo "Some text | $(wc -l < A.txt)"
cat A.txt
) > B.txt
答案3
lines=$( wc -l A.txt ) ; printf "Some Text | %s\n" ${lines%% *} > B.txt ; cat A.txt >> B.txt
的输出
wc
包括文件名,因此需要将其删除,这是使用 shell 的本机后缀删除功能来完成的${var%%glob}
。我个人倾向于默认使用
printf
而不是echo
因为echo
在某些情况下它会出现行为不当。执行两次输出重定向可确保输出文件不包含单行代码先前运行的数据;第一次重定向
>
会覆盖任何先前的版本。