Ошибка, которую вы получаете, говорит, что вам не хватает файла XTest.h.
Посмотрите, какой пакет его предоставляет (на производных debian):
dpkg -S Xtest.h
Пакет должен быть libXtst-dev
, вам может понадобиться добавить некоторые репозитории, если команда ничего не возвращает
Самый упрощенный подход - прочитать файл дважды: в первый раз вы сохраните абзацы и во второй раз поменяете их местами, например с 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
Есть несколько способов сделать это, но самый простой, который я вижу, - это grep
:
grep -v table1234 test.sql; grep table1234 test.sql
Вы начинаете с вывода всего, кроме table1234
строк, а после вывода только table1234
строк.
Если хотите, вы также можете перенаправить его в новый файл:
(grep -v table1234 test.sql; grep table1234 test.sql) > test2.sql