如何将一个字符串插入到文件的倒数第二行
如何将一个字符串插入到文件的倒数第二行
我有一个关于如何将字符串插入文件倒数第二行的问题。
例如:
$ cat diff_a.txt
students
teacher
mike
john
$ cat diff_b.txt
python
bash shell
Java
期望的结果应该是:
$ cat diff_b.txt
python
bash shell
mike
Java
如果我使用以下命令,它会将字符串"mike"附加到diff_b.txt的最后一行:
$ grep mike diff_a.txt >> diff_b.txt
$ cat diff_b.txt
python
bash shell
Java
mike
问题是:
我应该如何将"mike"放入diff_b.txt的倒数第二行?
在这个问题中,用户想要将一个字符串插入到一个文件的倒数第二行。以下是解决这个问题的方法:
方法一:
使用命令ed -s diff_b.txt <<< $'$-1r !grep mike diff_a.txt\nwq'
。
这个命令将ed
置于脚本模式,并将命令作为输入传递给它:
- $' ... '
是一个带引号的字符串:
- $-1r
在倒数第一行上减去1,r
从这一行开始读取:
- ! grep ...
是 shell 命令 grep ...
- \n
结束r
命令并换行
- wq
保存文件并退出 ed
方法二:
如果您已经知道要插入的文本,可以使用更简单的方法:
使用命令ed -s diff_b.txt <<< $'$-1a\nmike\n.\nwq'
。
在这个方法中,我们使用a
命令(以换行符结束),输入mike
文本(以换行符结束),然后用.
退出a
追加模式(以换行符结束),最后保存并退出。
如何将字符串插入文件倒数第二行的问题是因为需要在文件的特定位置插入字符串,解决方法是使用sed命令。
sed命令可以在指定行之前插入一行,给定它的位置:
sed '4i\My New Line\' my_file.txt
将在第四行插入"My New Line"。
使用wc -l命令可以获取文件中的行数:
$ wc -l < my_file.txt 5
下面是一个完整的示例,直接回答您的问题:
$ cat my_file.txt Hello World There is another line $ sed -i "`wc -l < my_file.txt`i\\My New Line\\" my_file.txt $ cat my_file.txt Hello World My New Line There is another line
- 添加-i选项以便sed实际编辑文件
- 使用双引号,否则在单引号内不执行替换和扩展
- 转义\字符
这是我得到的绝佳命令:sed "
cat diff_b.txt | wc -li\`grep mike diff_a.txt
\\" diff_b.txt`
也许sed '$iMy New Line' file
可以实现相同的功能。
mac用户可以使用gsed命令。
问题的出现原因:用户想要在一个文件的倒数第二行插入一个字符串。
解决方法:使用Python编写一个脚本,在文件中读取行,并在指定位置插入字符串。
以下是解决该问题的Python代码示例:
import re import sys # 获取文件名作为命令行参数 file_name = sys.argv[1] # 打开文件并读取所有行 fp = open(file_name) lines = fp.readlines() # 在倒数第二行插入字符串,可以使用sys.argv[2]获取第二个输入,第一个是文件名(也可以是文件路径) your_output = lines.insert(len(lines)-1, "insert text")
以上代码使用了`readlines`函数读取文件中的所有行,并通过`insert`函数在倒数第二行插入了指定的字符串。