Обратить все слова в текущей строке

Попробуйте подключиться к VPN из командной строки. Это позволит убедиться, что проблема связана с NetworkManager, а не с чем-то другим. Вы можете подключиться из командной строки, используя:

openvpn --config /path/to/config.ovpn

Возможно, вам нужно будет запустить эту команду, используя sudo.

Если вы можете успешно подключиться из командной строки, попробуйте добавить себя в группу netdev и снимите флажок Available to all users в окне настроек vpn в NetworkManager, а затем попробуйте подключиться с помощью NM.

1
задан 23 August 2014 в 07:25

2 ответа

Итак, вы действительно хотите отменить каждое слово, а не каждое предложение, правильно? Или ваша запятая должна быть периодом?

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 с тем же файлом. Перераспределение происходит до запуска команды, а > обрезает файл до нулевой длины. Когда команда запускается, входной файл уже был уничтожен.

4
ответ дан 24 May 2018 в 04:24
  • 1
    Как сохранить вывод непосредственно в файл? – αғsнιη 22 August 2014 в 20:59
  • 2
    @ KasiyA просто использует перенаправление. В последней строке просто напишите END >output.file (это справедливо и для других ответов). Обратите внимание, что ответ Гленна использует heredoc (синтаксис <<END ... END). Если у вас есть реальный файл, вы должны вызвать его команду следующим образом: perl -pe '... /eg'<input.file >output.file – Aserre 22 August 2014 в 21:03
  • 3
    Не помещайте перенаправление на последнюю строку, используйте первую строку. Объяснено в моем ответе – glenn jackman 22 August 2014 в 21:37

И вариант 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]

1
ответ дан 24 May 2018 в 04:24
  • 1
    Прекрасно работает, а также для неанглийского языка. благодаря – αғsнιη 23 August 2014 в 02:03

Другие вопросы по тегам:

Похожие вопросы: