如何在Linux中的文件中的每行后添加字符串
1.概述
我们有时需要快速更改文件,最好是从命令行本身。在文件的每一行末尾添加一个字符串就是这样一种更改。 在本教程中,我们将研究使用sed、awk、echo和perl执行此操作的多种方法。
2. 问题陈述
在本文中,我们将使用以下名为test.txt的示例文件:
$ cat test.txt
Python
Java
JavaScript
PHP
我们将看到如何添加字符串“是一种很棒的编程语言”。使用不同的方法到我们的test.txt文件中每一行的末尾。
3. 使用sed
sed (流编辑器)是 Linux 中一个强大的内置实用程序。我们可以使用它来执行文件的查找和替换、搜索、插入和删除等功能。
我们可以使用sed来编辑文件,甚至无需打开它们,这使得它可以轻松快捷地执行不同的文件功能。 让我们在测试文件上运行sed命令:
$ sed -i s/$/ is a great programming language./ test.txt
Python is a great programming language.
Java is a great programming language.
JavaScript is a great programming language.
PHP is a great programming language.
让我们分解此命令以了解更多信息:
- -i:指示sed就地编辑文件
- s : 用于替换
- / : 用于基于正则表达式的替换
- $ : 匹配行尾的正则表达式
- ” is a great…”:表示我们要添加的字符串
但是我们的结果只打印在标准输出上。要保存更改,我们需要修改我们的命令:
$ sed -i s/$/ is a great programming language./ test.txt > test_sed.txt
这会将我们的更改保存到test_sed.txt文件中。
4. 使用awk
awk 是包含在 Unix 和大多数 Unix 变体中的脚本语言。它的开发者名字是 Aho、Weinberger 和 Kernighan 的缩写,他们于 1977 年建造了它。
** awk使我们能够以语句的形式编写小程序,这些语句定义要在文件的每一行中搜索的文本模式,并在找到匹配项后执行操作。** 让我们输入以下命令来添加我们的字符串:
$ awk '{print $0, " is a great programming language."}' test.txt
Python is a great programming language.
Java is a great programming language.
JavaScript is a great programming language.
PHP is a great programming language.
让我们理解命令:
- print:用于从输入文件中输出选定的数据。
- $0:用于匹配整行的正则表达式。
- ” is a great…”:表示我们要在每行末尾添加的字符串。
此命令将结果输出到标准输出 (STDOUT)。
让我们修改它以将我们的更改保存到另一个文件:
$ awk '{print $0, " is a great programming language."}' test.txt > test_awk.txt
5. 使用echo
众所周知,echo 命令将文本写入标准输出(STDOUT)。
虽然echo命令的行为因 shell 而略有不同,但我们将在此处介绍 bash 内置版本。
让我们结合cat 命令并运行echo:
$ cat test.txt | while read line; do echo ${line}$" is a great programming language."; done
Python is a great programming language.
Java is a great programming language.
JavaScript is a great programming language.
PHP is a great programming language.
和以前一样,让我们分解一下:
- cat:我们首先使用cat来读取我们的文件。
- | pipe:我们用它来将cat与一个附加命令结合起来。
- while…do:我们使用 while 循环遍历文件中的每一行。
- done:一旦完成,我们就使用它来终止我们的函数。
但是,我们的结果只打印到标准输出 (STDOUT),以保存我们的更改。
让我们将更改保存到一个名为test_echo.txt的新文件中:
$ cat test.txt | while read line; do echo ${line}$" is a great programming language." >> test_echo.txt; done
6. 使用perl
perl (Practical Extraction and Report Language)是一种**最初为扫描任意文本文件、从中提取信息并根据输入数据生成报告而优化的语言。**它结合了sed、awk和sh 的一些特性,使我们能够更轻松、更熟悉地快速解决常见问题。
让我们运行perl命令:
$ perl -pi -e 's/$/\ is a great programming language./' test.txt
让我们仔细看看以了解更多信息:
- -pi:我们使用这个标签来打印和保存我们的更改。
- -e:我们使用这个标签,以便我们可以从终端执行perl代码,而不是创建一个文件。
- s/$/:代表一个正则表达式,它以我们文件中每一行的结尾为目标。
上面的命令没有显示标准输出的结果。但是,我们可以对输入文件本身使用cat命令来查看更改。由于perl直接对输入文件进行更改,因此我们不需要创建新文件。