Попробуйте подключиться к VPN из командной строки. Это позволит убедиться, что проблема связана с NetworkManager, а не с чем-то другим. Вы можете подключиться из командной строки, используя:
openvpn --config /path/to/config.ovpn
Возможно, вам нужно будет запустить эту команду, используя sudo.
Если вы можете успешно подключиться из командной строки, попробуйте добавить себя в группу netdev и снимите флажок Available to all users в окне настроек vpn в NetworkManager, а затем попробуйте подключиться с помощью NM.
Итак, вы действительно хотите отменить каждое слово, а не каждое предложение, правильно? Или ваша запятая должна быть периодом?
perl -pe 's/(\w+)/ reverse $1 /eg' << END
DCBA. HGFE.GI
MLK,PON.RQ
UTS. ZYXWV. 321
END
ABCD. EFGH.IG
KLM,NOP.QR
STU. VWXYZ. 123
Если вы хотите перенаправить, сделайте следующее:
perl -pe 's/(\w+)($|\W+)/ reverse($1) . $2 /eg' < file_in > file_out
В моем примере сделайте [!d3 ]
perl -pe 's/(\w+)($|\W+)/ reverse($1) . $2 /eg' << END > file_out
НЕ помещайте перенаправление в ту же строку, что и завершающее слово heredoc. Если вы это сделаете, оболочка не сможет найти конец heredoc.
С перенаправлением в и из файлов никогда не делайте этого: command < file > file с тем же файлом. Перераспределение происходит до запуска команды, а > обрезает файл до нулевой длины. Когда команда запускается, входной файл уже был уничтожен.
И вариант verbose (python):
#!/usr/bin/env python3
with open("/path/to/sourcefile") as messed_up:
lines = [list(line.replace("\n", "")) for line in messed_up]
def reverse_line(l):
i=0; line = ""; sep = (" ", ",",".")
while i < len(l):
word = []
while not l[i] in sep:
word.append(l[i]); i = i+1
if i == len(l):
line = line + ("").join(reversed(word)); break
else:
line = line + ("").join(reversed(word)) + l[i]
i = i+1
print(line)
for l in lines:
reverse_line(l)
Выходы:
ABCD. EFGH.IG
KLM,NOP.QR
STU. VWXYZ. 123
Линии «застроены» слева направо; символы в списке sep (пробелы, запятые, точки или любые другие определенные) и одиночные другие символы помещаются непосредственно в строку, сначала собираются последовательные числа других символов и реверсируются, прежде чем они будут добавлены в строку. [ ! d2]