如何将.txt文件的内容逐行追加到另一个.txt文件?

时间:2018-07-12 04:03:07

标签: shell

所以我有一个包含此内容的1.txt文件

1.1.1.1/0 2.2.2.2/0 9.9.9.9/0

我想将它们附加到2.txt文件中,就像这样:

......
1.1.1.1/0
2.2.2.2/0
9.9.9.9/0

我应该怎么做?

1 个答案:

答案 0 :(得分:3)

执行此操作的简单方法是使用 command-substitution 将{em>重定向 file1printf "%s\n",然后将结果返回到file2 。例如,给定:

$ cat file1.txt
1.1.1.1/0 2.2.2.2/0 9.9.9.9/0

您可以使用单个file2.txt 创建您想要的>(截断/创建新的file2.txt)以重定向输出到file2.txt,但是如果您要按照问题中的说明附加file2.txt的原始内容,请使用>>,例如:

$ printf "%s\n" $(<file1.txt) >>file2.txt

将以下内容附加到您的file2.txt

$ cat file2.txt
## original content
1.1.1.1/0
2.2.2.2/0
9.9.9.9/0

(这通常称为 printf-trick ,其中printf "%s\n"将依靠分词来将列表分成与列表中一样多的由换行符分隔的单个单词。它具有还有很多其他用途。请警惕,如果您的行数多于shell可以作为参数容纳的行数(如果我没记错的话,这是32767,则可能无效)

另一种更标准的方法是使用trspaces 翻译成'\n',例如

$ tr ' ' '\n' < file1.txt >> file2.txt

将完成相同的操作。另请注意,您可以使用 character class (例如' ')来代替单个空格使用[...],bash提供POSIX标准字符类,例如{{ 1}}(有关完整列表,请参见alnum alpha ascii blank ...),可以在 character class 中使用,例如man bash来检查所有空白字符([:blank:],等。)而不仅仅是空间。例如:

space tab newline

(关于创建/附加$ tr '[:blank:]' '\n' < file1.txt >> file2.txt 的相同注释)

您还可以使用>/>>来完成相同的操作,例如

sed

$ sed 's/[ ]/\n/g' file1.txt >> file2.txt 的好处是,您可以控制地址之间任意数量空格的替换。例如,如果地址之间有一些可变数量的空格或制表符,则可以使用sed处理以下问题:

sed

尝试一下,知道$ sed 's/[ \t][ \t]*/\n/g' file1.txt >> file2.txt tr是更强大的解决方案,但是 printf-trick 也可以派上用场。

相关问题