如何使用行号从文件中获取行并轻松编辑它?

如何使用行号从文件中获取行并轻松编辑它?

我想知道如何使用行号从文件中提取内容。我的文件中有几千万行,有时在将其导入某些数据库(如 mongodb)时会出现问题。所以我需要编辑它。但为了编辑一行而一次又一次打开几 GB 的文件是不值得的。
因此,我想知道如何使用行号从文件中提取内容,然后编辑任何我想编辑的内容并将其再次保存到文件中,而无需完全打开文件。举个例子:

command line_number 20000 /path/to/input/file

输出:

This your first testing text.
edit line_number 20000 /path/to/input/file

然后出现该行,然后我移动到特定字符,your在该行中说并将其更改为my。现在我在该行上的新内容变成:

This is my first testing text.

请注意,我不知道该行是否有该词。所以,首先我需要检查该行。使用行号显示该行。然后编辑它。
有办法实现吗?
让我澄清一下,我使用的是 UBUNTU 16.04。这个问题完全基于 UBUNTU,没有其他操作系统或 Linux 发行版。请不要这样做。

答案1

您可以使用sedperl打印第 X 行:

$ cat -n input.txt                                                                                    
     1  roses are red
     2  violets are blue
     3  sed is interesting
     4  and perl is too

$ perl -ne 'print $_ if $. == 3'  input.txt                                                           
sed is interesting
$ sed -n '3p' input.txt                                                                               
sed is interesting

然后你可以使用sed 'NUMBERs/WORD/NEWWORD/' file.txt

$ sed '3s/interesting/fun/'  input.txt                                                                
roses are red
violets are blue
sed is fun
and perl is too

-i也可以使用标志来就地编辑文件。

与 Perl 相同:

$ perl -pe 's/interesting/fun/ if $. == 3'  input.txt                                                 
roses are red
violets are blue
sed is fun
and perl is too

笔记:通过这两个编辑示例,您无需知道该行是否包含单词。只有当该行包含单词/模式时,perl和才会替换该单词。如果不包含 - 该行将保持不变。sed

答案2

您可以使用 vi 命令来编辑文件而无需打开它们:

vi -c "%s/<old_value>/<new_value>/g|wq" <file_path>

例如

vi -c "%s/<100>/<200>/g|wq" /home/aditya/sample.txt

更新 1:

sed '<line_number>!d' <filepath> ( this will print the line)


sed -i '<line_number>s/.*/<new_text>/' <filepath>  ( this is replace everthing in line with 'new_text')

更新2:

sed -i '<line_number>s/<old_text>/<new_text>/' <filepath>  ( this is replace 'old_text' with 'new_text')

看看是否有帮助。

相关内容