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