Премахване на текст, който е записан във файл, от множество файлове в linux terminal

Бих искал да премахна текст, който съм записал във файл (тъй като е доста дълъг), за който знам, че е част от много файлове в директория (и нейните поддиректории). Сега искам да премахна този примерен текст от всички тези файлове.

Прочетох този, но той не използва входен файл — не мога да управлявам тази малка корекция :)

Благодаря ви предварително.

Информация: Използвам Ubuntu 13.10 i386


person tukusejssirs    schedule 17.03.2014    source източник
comment
Вместо оператора за диапазон 1,4d в примера, който публикувахте, просто направете 's/‹your text›//' ...   -  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
благодаря U, свърши работа за мен ... само бележка: това е само и .orig суфикс към оригиналните файлове ... - person tukusejssirs; 18.03.2014