![Как удалить текст перед разделителем?](https://rvso.com/image/168776/%D0%9A%D0%B0%D0%BA%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%20%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC%3F.png)
Мне нужна помощь в удалении текста после );
и до |
разделителей во всех строках текстового файла. То есть:
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