Как поменять местами две группы строк в файле .sql?

Ошибка, которую вы получаете, говорит, что вам не хватает файла XTest.h.

Посмотрите, какой пакет его предоставляет (на производных debian):

dpkg -S Xtest.h

Пакет должен быть libXtst-dev, вам может понадобиться добавить некоторые репозитории, если команда ничего не возвращает

1
30.12.2016, 20:58
2 ответа

Самый упрощенный подход - прочитать файл дважды: в первый раз вы сохраните абзацы и во второй раз поменяете их местами, например с awk (в режиме абзаца):

awk -v RS= -v ORS='\n\n' 'NR==FNR{
if (/table1234/) {one=$0} else if (/table7890/){two=$0}
next
}
{
if (/table1234/) {$0=two} else if (/table7890/){$0=one}
}
1' infile infile

Это напечатает завершающую пустую строку, если это имеет значение ...


Другой способ с ol ' ed , который действительно работает в этот конкретный случай:

ed -s infile <<\IN
g/INSERT INTO table1234/d
-1r !grep -F 'INSERT INTO table7890' infile
+1,$g/INSERT INTO table7890/d
-1r !grep -F 'INSERT INTO table1234' infile
,p
q
IN
1
27.01.2020, 23:46

Есть несколько способов сделать это, но самый простой, который я вижу, - это grep :

grep -v table1234 test.sql; grep table1234 test.sql

Вы начинаете с вывода всего, кроме table1234 строк, а после вывода только table1234 строк.

Если хотите, вы также можете перенаправить его в новый файл:

(grep -v table1234 test.sql; grep table1234 test.sql) > test2.sql
0
27.01.2020, 23:46

Теги

Похожие вопросы