Как удалить текст перед разделителем?

Как удалить текст перед разделителем?

Мне нужна помощь в удалении текста после );и до |разделителей во всех строках текстового файла. То есть:

 SUBSCIBER_MSISDN=6289666195060');BEGIN DBMS_LOCK.SLEEP(5); END-- rKSy|

И результат должен был быть таким

SUBSCIBER_MSISDN=6289666195060|

Есть идеи, как удалить эту часть? Это большой файл.

Я сойду с ума, если мне придется использовать sed.

решение1

Предположим, что вы показываете полную строку из какого-то входного файла:

sed "s/'.*/|/" file >newfile

Это заменит все после первого 'символа в каждой строке на |символ. Результат будет записан в новый файл посредством перенаправления. Я использую двойные кавычки вокруг sedвыражения, поскольку строка в одинарных кавычках никогда не может содержать символ одинарной кавычки.

Учитывая ваш пример данных, это даст

 SUBSCIBER_MSISDN=6289666195060|

Если вы дополнительно хотите удалить пробелы в начале строки (ваш пример, кажется, делает это):

sed -e "s/'.*/|/" -e 's/^[[:blank:]]*//' file >newfile

или,

sed "s/'.*/|/; s/^[[:blank:]]*//" file >newfile

Если у вас есть отвращение к sed, вы можете использовать его awk, чтобы выполнить точно такое же преобразование:

awk '{ sub("'"'"'.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

Странно выглядит '"'"'одинарная кавычка. Она должна быть заключена в двойные кавычки снаружи строки в одинарных кавычках, которая составляет код awk. Мы также могли бы использовать '\'', т.е.

awk '{ sub("'\''.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

Или вы можете использовать восьмеричный код ASCII для символа одинарной кавычки:

awk '{ sub("\047.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

Связанный контент