2016-11-04 77 views
1

我无法将头部缠绕在sed上。我需要使用它来将文字“您有n文件”插入到现有文件中。我知道ls | wc -l得到我n,但由于某些原因,我找不到合适的语法让sed将其插入到第一行下面的现有文件中。将文本+管道命令插入到sed文件中

这里是我想出迄今 -

echo "File log for" `date` > filelog | sed -i '1s/You currently have `n` files /' filelog 

我的主要问题(我希望)是越来越sed的识别ls | wc -l与文本作为一行沿。

+0

不清楚你问...从我能理解你需要两个命令,所以改变'|''来;'或使用两个命令分开......在特定行之后添加一些内容,使用'a'命令不能替代..例如:在GNU sed上,''sed -i'1a您目前拥有'n'个文件'filelog'。不知道你是什么意思,被反包围绕 – Sundeep

+0

抱歉有关混淆。我把“n”作为一个数字的占位符(想象代数)来反引号。我从ls |中获得数字wc -l命令。 –

回答

1

可与printfcommand substitution

printf "File log for $(date)\nYou currently have $(ls | wc -l) files\n" > filelog 


注:Avoid parsing ls

例如,尝试添加一个文件touch $'\n'as又算什么呢。在这种情况下,虽然,我们可以使用-q选项来解决该

printf "File log for $(date)\nYou currently have $(ls -q | wc -l) files\n" > filelog 
+1

我终于放弃了sed,并与这件事情非常相似。 我将此标记为答案,主要是因为它不像其他示例那样复杂,而不会丢失任何功能。 –

1

(SED GNU)为您这miight工作:

sed -i -e '1e echo File log for $(date)' -e '1e echo You currently have $(ls|wc -l) files' file 

使用e命令,在需要的地址评估shell命令。