我有一个关于如何将字符串插入文件的倒数第二行的问题。
$ 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
$ grep mike diff_a.txt >> diff_b.txt
$ cat diff_b.txt
python
bash shell
Java
mike
How should I put "mike" into second to last line of diff_b.txt ?
答案 0 :(得分:6)
您可以使用@import '~normalize.css/normalize.css';
在特定行之前插入一行,并指明它的位置:
sed
将在第四行插入“我的新行”
您可以使用sed '4i\My New Line\' my_file.txt
获取文件中的行数:
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
以便sed实际编辑文件-i
答案 1 :(得分:2)
将任何命令(例如grep mike diff_a.txt
)的输出读入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
- w
rite(保存文件)和q
uit ed 如果您已经知道要插入的文本,这对您的示例来说要简单得多:
ed -s diff_b.txt <<< $'$-1a\nmike\n.\nwq'
这里我们使用a
append命令(以回车符结束),输入mike
文本(以回车符结束),然后退出a
追加模式{ {1}}(以回车符结束),然后保存并退出。
答案 2 :(得分:1)
我有一个python解决方案。使用readlines
将文件中的行读入列表,然后插入值。
import re
import sys
file_name = sys.argv[1]
fp = open(file_name)
lines = fp.readlines()
your_output = lines.insert(len(lines)-1,"insert text") # you can also use sys.argv[2] if you want two inputs, first is file_name (also accepts file path), second can be your insert text
答案 3 :(得分:1)
一种hacky解决方案,但您可以使用head
的负线计数来获取除最后一行之外的所有行,插入新行,然后使用tail
来获取最后一行原始文件。您必须先将输出重定向到临时文件,然后覆盖原始文件。
( head -n -1 diff_b.txt
echo "mike"
tail -n 1 diff_b.txt ) > tmp.txt
mv tmp.txt diff_b.txt
答案 4 :(得分:1)
从文件中grep一行并插入到倒数第二个位置到另一个文件
如果你没有特殊的字符......
$ tac file2 | sed "2i$(grep mike file1)" | tac
python
bash shell
mike
Java
答案 5 :(得分:0)