как поступить с sed, если список аргументов слишком длинный

vim распознает определенные типы файлов журнала и раскрасит их, как только вы включите подсветку синтаксиса. Например, вот gvim показывает / var / log / syslog:

gvim showing /var/log/syslog

Вы можете изучить vim с помощью команды vimtutor примерно за полчаса. Вы, конечно, не освоите его, и он даже не будет разбираться в подсветке синтаксиса, но вы узнаете, как перемещаться по файлу, и получите представление о его возможностях.

Включение подсветки синтаксиса должно быть таким же простым, как : синтаксис на , хотя вам, возможно, придется указать синтаксис. В графическом интерфейсе пользователя (gvim, macvim и т. Д.) Будет строка меню с элементом Syntax . Скажите «Показать типы файлов в меню» (если необходимо), а затем найдите соответствующий формат./ var / log / syslog использует формат «сообщений» (вы также можете сделать это с помощью : set syn = messages ).

Для вывода подсветки синтаксиса vim

Вот моя функция HTMLize , которая выводит эти цвета как HTML, а также строки для сопоставления их с F7 . Просто добавьте их в свой ~ / .vimrc :

function! HTMLize(...)
  let scheme = "default"
  if (a:0 > 0)
    let scheme = a:1
  endif
  let g:html_use_css = 0
  let oldcolorscheme = g:colors_name
  let oldbg = &background
  execute "colorscheme " . scheme
  set background=light
  TOhtml
  %s/[\r\n]\+//g
  %s/\(color="\|text="\|style="background-color: \)#af0000/\1#b00/ige
  %s/\(color="\|text="\|style="background-color: \)#a52a2a/\1#a22/ige
  %s/\(color="\|text="\|style="background-color: \)#af5f00/\1#a60/ige
  %s/\(color="\|text="\|style="background-color: \)#d7afaf/\1#daa/ige
  %s/\(color="\|text="\|style="background-color: \)#870087/\1#808/ige
  %s/\(color="\|text="\|style="background-color: \)#005faf/\1#05b/ige
  %s/\(color="\|text="\|style="background-color: \)#005f87/\1#068/ige
  %s/\(color="\|text="\|style="background-color: \)#\([0-9a-f]\)\2\([0-9a-f]\)\3\([0-9a-f]\)\4/\1#\2\3\4/ige
  %s/\(color="\|text="\|style="background-color: \)#\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\3\([0-9a-f]\)\3/\1#\2\4\5/ige
  %s/\([\r\n]*/\1\r\r\r\r
/
  %s/<\/font>\([\r\n]*<.body>\)/<\/pre>\r\r\r\r\1/
  %s/$//
  execute "colorscheme " . oldcolorscheme
  execute 'set background = "' . oldbg . '"'
endfunction
noremap   :call HTMLize("lucius")
inoremap   :call HTMLize("lucius")

На самом деле это просто очищенная версия TOhtml , которая дополнительно изменяет вашу цветовую схему, чтобы сделать ее более разборчивой (я использую темный фон с нестандартной цветовой схемой lucius , который, как и популярная солнечная цветовая схема , поддерживает как темный, так и светлый фон).

0
31.03.2019, 20:36
2 ответа

Вариант без -xargs, использующийfind:

find. -maxdepth 1 -type f -name '*.ovpn' \
    -exec sed -i 's/auth-user-pass/auth-user-pass pass.txt/g' {} +

Это приведет к выполнению вашей команды sedдля как можно большего количества имен файлов, (только для обычных файлов, без совпадающих имен каталогов и т. д. ), с именами файлов, соответствующими заданному шаблону из текущего каталога (только ). Это также справится с потенциально странными именами файлов (, пробелами, символами новой строки и т. д.)

Опция/предикат -maxdepthне является стандартной, но часто реализуется.

1
28.01.2020, 02:30

Да, xargs— правильный путь.

Простой случай

echo *.ovpn | xargs sed -i 's/auth-user-pass/auth-user-pass pass.txt/g'

но это работает только для файлов, имена которых не содержат пробелов. Безопасный путь

printf '%s\0' *.ovpn | xargs -0 sed...

Если вы не хотите запускать весь конвейер как root, укажите sudoперед xargsили перед sed.

1
28.01.2020, 02:30

Теги

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