Добавить символ в начало / конец строки различной длины в файле (Python / * nix) - PullRequest
1 голос
/ 11 октября 2019

У меня есть файл SQL с десятками операторов SQL, где каждый оператор SQL содержит переменные в виде $<variable_name> (например, $today). Переменные имеют разную длину, всегда начинаются с $ и могут сопровождаться различными символами (например, ., ,, ), :, \n, пробелами и т. Д.), Нозавершающие символы не связаны с переменной.

Я пытаюсь заменить $<variable_name> на @@@<variable_name>@@@. В начале легко заменить $ на @@@, но я не могу найти решение, чтобы добавить @@@ в конец переменной.

Решение в командной строке Linux илиПитон будет предпочтительным. Я начал возиться с ...

> grep '\$' file.sql | cut -d'$' -f2 | cut -d'.' -f1

И я мог бы постоянно добавлять cut с новыми разделителями, но это на самом деле не представляет решения.

1 Ответ

1 голос
/ 11 октября 2019

Используйте функцию sub из модуля регулярных выражений python, re:

from re import sub

text = '$some_name,other stuff,whatever'

result = sub(r'\$(\w*)', r'@@@\1@@@', text)

print(result)

Дает:

@@@some_name@@@,other stuff,whatever

Регулярное выражение \$(\w*) соответствует группе, сначала \w соответствует любому буквенно-цифровому символу или подчеркиванию, а * означает кратное. На эту группу можно ссылаться как \1. Затем мы строим замену как @@@\1@@@, где \1 заменяется соответствующими символами.

Если вы хотите применить его ко всему файлу, вы можете отредактировать файл на месте, используя fileinput модуль:

from fileinput import input

for line in input(['file.sql'], inplace=True):
    print(sub(r'\$(\w*)', r'@@@\1@@@', line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...