Появляется следующая программа sed
. Я подчеркнул буквальные строки для строки 1 и строки 2 :
/LINES TERMINATED BY '$/{N;s/\n\(' STORED AS INPUTFORMAT\)/\1/;}
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
Разбивка
Соответствие строка 1 :
/LINES TERMINATED BY '$/{N;s/\n\(' STORED AS INPUTFORMAT\)/\1/;}
^^^^^^^^^^^^^^^^^^^^^^^^
Выполнить все команды в блоке между {
и }
при совпадении:
/LINES TERMINATED BY '$/{N;s/\n\(' STORED AS INPUTFORMAT\)/\1/;}
^ ^
Первая команда: добавить следующую строку (т.е. строка 2 ) к текущему образцу (т. Е. Добавить к концу строка 1 ). После добавления пространство шаблона будет содержать разделитель новой строки между строка 1 и строка 2 :
/LINES TERMINATED BY '$/{N;s/\n\(' STORED AS INPUTFORMAT\)/\1/;}
^
Вторая команда: заменить первое (и только) вхождение из «новой строки, за которой следует строка 2 » с просто « строка 2 » (т.е. удалить новую строку):
/LINES TERMINATED BY '$/{N;s/\n\(' STORED AS INPUTFORMAT\)/\1/;}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Если s///
не совпадает новая строка из строка 1 сохраняется, а пространство шаблона ( строка 1 '\ n' строка 2 ) выводится как-по существу, сохраняя обе строки без изменений.
Цитирование bash
'/LINES TERMINATED BY '"'"'$/{N;s/\n\('"'"' STORED AS INPUTFORMAT\)/\1/;}'
^^^^^^^^^^^^^^^^^^^^^ ~~~ ^^^^^^^^^^^ ~~~ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Символы, выделенные ^
, сохраняются в одинарных кавычках. Шаблоны, выделенные ~
, вводят буквальную одинарную кавычку '
в строке.
Альтернативное решение
Если ваш sed
поддерживает -z
опцию, вы должны иметь возможность сделать это следующим образом:
sed -z -e 's/LINES TERMINATED BY '"'"'\n'"'"' STORED AS INPUTFORMAT/LINES TERMINATED BY '"''"' STORED AS INPUTFORMAT/g' external_revenue.sql > myfile_new.txt
Использование -z
(данные, разделенные NUL) позволяет сопоставлять новые строки (используя \n'
) непосредственно в регулярном выражении поиска.
Образец external_revenue.sql
:
LINES OK
LINES TERMINATED BY '
' STORED AS INPUTFORMAT
LINES OK
LINES OK
LINES TERMINATED BY '
' STORED AS INPUTFORMAT
LINES OK
Сеанс терминала:
$ sed -z -e 's/LINES TERMINATED BY '"'"'\n'"'"' STORED AS INPUTFORMAT/LINES TERMINATED BY '"''"' STORED AS INPUTFORMAT/g' external_revenue.sql
LINES OK
LINES TERMINATED BY '' STORED AS INPUTFORMAT
LINES OK
LINES OK
LINES TERMINATED BY '' STORED AS INPUTFORMAT
LINES OK