2013-08-06 2 views
0

Я довольно новичок в Linux. Я ищу способ редактировать файл, не открывая его, а просто редактируя вывод grep.динамическое редактирование в linux

Так что, если я

grep find_me allMyfiles 

и получить выход

file_1: this is find_me line in file_1 
file_2: this is find_me line in file_2 

Я хотел бы изменить определенную линию без необходимости открывать файл, так что, например, изменив первый удар по

file_1: this is find_me line in file_1 including my edits 

и с этим изменение сохраняются в file_1

ответ

1

Вы не определили, что «открытие файла» означает для вас.

Но что-то необходимо сделать в системном номере open(2). (Нет способа читать внутри файла без использования этого open(2) syscall).

Если вы хотите изменить какой-либо файл программно (внутри сценария оболочки), рассмотреть вопрос об использовании GNU ed или GNU sed или GNU emacsemacs --batch или emacs --eval ....)

Возможно GNU awk может быть полезным.

Чтение Advanced Linux Programming и Advanced Bash Scripting должно быть полезно.

+0

с открытым, я имел в виду, используя редактор как VI – chrise

+0

Тогда я ответил на ваш вопрос: используйте 'ed' или' sed' или 'Emacs --batch' или' Emacs --eval' –

+0

Спасибо, рассмотрим ваши предложенные решения – chrise

1

Использование sed:

sed -i.bak '/find_me/s/$/ including my edits/' filename 
+0

Спасибо. Посмотрите на sed – chrise

Смежные вопросы