Как получить строку из файла, используя номер строки, и легко отредактировать ее?
Я хочу знать, как можно извлечь извлеченный контент из файла, используя номер строки. У меня есть крены строк в файле, и иногда при импорте его в какую-либо базу данных, например, mongodb, это вызывает проблемы. Поэтому мне нужно отредактировать это. Но открывать ГБ файла снова и снова только для редактирования одной строки не стоит.
Следовательно, я хотел бы знать, как я могу извлечь содержимое из файла, используя его номер строки, а затем отредактировать все, что я хочу отредактировать, и снова сохранить его в файл, не открывая файл полностью. Скажи для примера:
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. Пожалуйста, не это.
2 ответа
Ты можешь использовать sed
или же perl
напечатать строку 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
заменит слово тогда и только тогда, когда строка содержит слово / шаблон. Если этого не произойдет - линия останется прежней.
Вы можете использовать команду 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')
Посмотрите, поможет ли это.