Команда perl или sed находит 2 строки и заменяет первую строку строкой 2 - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть несколько файлов с текстом ниже.

Содержимое файла 1:

Begin("tmp1","derived from file \"/disks/setup/ORIG_FILE1.txt\"");

Содержимое файла 2:

Begin("tmp1","derived from file \"/disks/setup/ORIG_FILE2.txt\"");

Содержимое файла 3:

Begin("tmp9","derived from file \"/disks/setup/ORIG_FILE4.txt\"");

и так далее .....

Есть ли в perl или sed какая-либо команда для поиска строки с "Begin" и в этой строке поиск по первой строке между "... "(т.е. в нашем случае" tmp1 ") и сохраните его в переменной, затем найдите последнюю строку между / .. \" "т.е. (здесь ORIG_FILE1.txt) и сохраните ее в переменной 2, а затем удалите".txt "из переменной 2, а затем замените переменную 1 переменной 2 и обновите файл.

Таким образом, выходные файлы будут выглядеть следующим образом:

Содержимое файла 1:

Begin("ORIG_FILE1","derived from file \"/disks/setup/ORIG_FILE1.txt\"");

Содержимое файла 2:

Begin("ORIG_FILE2","derived from file \"/disks/setup/ORIG_FILE2.txt\"");

Содержимое файла 3:

Begin("ORIG_FILE4","derived from file \"/disks/setup/ORIG_FILE4.txt\"");

и т. Д. *

Может кто-нибудь помочь мне, пожалуйстаздесь

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

С любым sed в любой оболочке на любой UNIX-машине:

$ sed 's/\([^"]*"\)[^"]*\(.*\/\([^.]*\)\)/\1\3\2/' file
Begin("ORIG_FILE1","derived from file \"/disks/setup/ORIG_FILE1.txt\"");
Begin("ORIG_FILE2","derived from file \"/disks/setup/ORIG_FILE2.txt\"");
Begin("ORIG_FILE4","derived from file \"/disks/setup/ORIG_FILE4.txt\"");
0 голосов
/ 08 апреля 2019

от gnu sed как ваши данные в 'd',

 sed -E 's~^(Begin\(")\w+(".+/)(\w+)(\.\w+\\""\);)~\1\3\2\3\4~' d
0 голосов
/ 19 февраля 2019

Попробуйте это:

perl -i.bak -pe '
    if (/.*\/(.+)\.txt/) {
        $file = $1;
        s/(?<=").*?(?=")/$file/
    }
' file1 file2 file3 ...

Это будет сначала захватить имя файла "orig" (при условии, что все они имеют расширение ".txt"), затем замените заполнитель "tmp".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...