Удалить текст, сохраненный в файле, из нескольких файлов в терминале Linux

Я хотел бы удалить некоторый текст, который я сохранил в файл (потому что он довольно длинный), о котором я знаю, что он является частью многих файлов в каталоге (и его подкаталогах). Теперь я хочу удалить этот образец текста из всех этих файлов.

Я прочитал этот файл, но он не использует входной файл — я не могу управлять эта маленькая доработка :)

Заранее спасибо.

Информация: я использую Ubuntu 13.10 i386.


person tukusejssirs    schedule 17.03.2014    source источник
comment
Вместо оператора диапазона 1,4d в приведенном вами примере просто выполните 's/‹ваш текст›//'...   -  person tink    schedule 18.03.2014
comment
Так что я могу просто сделать find . -type f -iname \*.txt -exec sed -i~ 's/file_name//' '{}' +?   -  person tukusejssirs    schedule 18.03.2014
comment
Нет, не имя файла. Текст, который вы хотите удалить   -  person tink    schedule 18.03.2014


Ответы (1)


Пусть общий текст находится в файле с именем «common.txt».

find . -type f -not -name common.txt -print0 |
xargs -0  perl -i.orig -0777 -pe '
    BEGIN {open my $fh, "<", "common.txt"; $common = <$fh>; close $fh} 
    while (($i=index($_, $common)) != -1) {
        substr($_, $i, length($common)) = ""
    }
'

Эта программа Perl читает каждый файл как одну строку, а затем использует сопоставление простых строк для удаления общих частей.

person glenn jackman    schedule 17.03.2014
comment
спасибо, у меня это сработало ... просто примечание: это просто суффикс .orig к исходным файлам ... - person tukusejssirs; 18.03.2014