如何使用 sed 合并文件列表?

如何使用 sed 合并文件列表?

我希望按字母顺序反向列出几个文件夹中的文件,然后将这些数据汇总到一个文件中 ( AllDirectoriesFileInfo.txt)。我已经搞清楚了排序方法;现在只需整理那些让我困惑的信息。以下是我目前所拥有的:

ls -r /home/tony/Desktop/jpgfolder > AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/giffolder > AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/docxfolder > AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/dregsfolder > AllDirectoriesFileInfo.txt

然而,经检查AllDirectoriesFileInfo.txt,只存在来自的信息dregsfolder,这使我得出结论,先前的数据已被每个命令覆盖。

所以,我知道sed可以添加/插入文本。

最初我倾向于使用a

语法很简单,只需使用相应的数字或模式来指定要在哪一行后插入新行。

但是对我来说,指定行号是有问题的。假设我指定了第 50 行,会不会出现大量空白?或者假设使用了一个更大的文件,那么信息会不会变得乱码?

我知道使用i命令(插入)用户可以指定插入新文本的位置。

我的想法和伪代码如下:

All information of folder 1 stored here
**END of folder 1 info**
All information of folder 2 stored here

然后从那里,使用 SED 在文件夹 1 信息的结尾后插入下一个文件

这有用吗?还是说我这是在对天发牢骚?

答案1

你简直是在对着月亮咆哮。只需使用附加重定向器>>而不是写入重定向器>

touch AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/jpgfolder >> AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/giffolder >> AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/docxfolder >> AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/dregsfolder >> AllDirectoriesFileInfo.txt

或者忘记附加,只需给出ls多个参数:

ls -r /home/tony/Desktop/jpgfolder /home/tony/Desktop/giffolder /home/tony/Desktop/docxfolder /home/tony/Desktop/dregsfolder >> AllDirectoriesFileInfo.txt

简化:

ls -r ~tony/Desktop/{jpgfolder,giffolder,docxfolder,dregsfolder} >> AllDirectoriesFileInfo.txt

更短的假设tony是您的用户名:

ls -r ~/Desktop/{jpg,gif,docx,dregs}folder >> AllDirectoriesFileInfo.txt

但是,如果你要对文件中的数据进行任何处理,你会想要使用find而不是ls,因为一般来说,ls为人类提供输出以供阅读,find为计算机提供输出以供阅读。具体来说,在这种情况下,find列出文件它的路径在一起。

以下是一个简单的例子:

$ mkdir dir1 dir2
$ touch {dir1,dir2}/file1
$ ls -r dir1 dir2 > ls_r_out.txt

现在假设我想搜索“file1”:

$ grep 'file1$' ls_r_out.txt
file1
file1

好吧,这没什么帮助,因为它没有告诉我在哪里文件是。我将尝试使用相同的过程find。现在,find不支持排序,所以我必须通过管道传输sort

$ find dir1 dir2 | sort -r > find_reverse_out.txt
$ grep 'file1$' find_reverse_out.txt 
dir2/file1
dir1/file1

瞧瞧。请注意,如果文件名包含任何特殊字符(如换行符),情况会变得更加复杂。

相关内容