Как добавить префикс в мой редактор vi в последовательных строках? - PullRequest
0 голосов
/ 11 мая 2018

Мой ввод:

Test1.txt 
a
a
b
b
c
c

Ожидаемый результат должен быть

пользователь chown: пользователь a

chmod 755

пользователь chown: пользователь b

chmod 755 b

пользователь chown: пользователь c

chmod 755 с

Пожалуйста, предложите лучший способ сделать это для 10 000 строк в одном документе В основном добавление 2 разных префиксных команд для одного и того же пути (который повторяется дважды одна за другой)

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Если ваш файл похож на

a
a
b
b
c
c

Вы можете использовать команду vi

:%s/^\(.*\)\n\(.*\)/chown user:\1\rchmod 755 \2/g

, если весь файл соответствует этому формату.

Группировка используется.\n соответствует новой строке, а \r вставляет новую строку.

Или, если имя файла включено и ваш файл похож на

Test1.txt 
a
a
b
b
c
c

, используйте

:2,$s/^\(.*\)\n\(.*\)/chown user:\1\rchmod 755 \2/g
0 голосов
/ 11 мая 2018

Работать со списком уникальных путей проще, поэтому начните с удаления каждой второй строки:

:g/^/+d

(взято из этого ответа )

Тогдазамените каждую строку нужными вам командами:

:%s/.*/chown user:user &\rchmod 755 &/

:%                                     run this command on the entire buffer:
  s                                    replace
   /.*/                                an entire line with
       chown user:user                 (literal "chown user:user ")
                       &               the entirety of the match
                        \r             newline
                          chmod 755    (literal "chmod 755 ")
                                    &  the entirety of the match again
                                     / (end the regex)

(& и \r задокументированы в :help sub-replace-special.)

...