sed: Переносимое решение для сопоставления «любого символа, кроме новой строки»

Вам следует:

  • добавить # перед strict_chains
  • удалить # перед dynamic_chains
  • добавить (socks5 127.0.0.1 9050) без () сразу под socks4 127.0.0.1 9050)

и сохранить файл конфигурации для эти изменения

1
01.05.2017, 13:15
3 ответа

На самом деле есть очень удобный способ справиться с этим сценарием в обычном sed: поменять местами новую строку с каким-нибудь обычным символом, скажем, _, затем выполнить [^_] и затем вернуться назад. Я хотел опубликовать решение возникшей проблемы, но был слишком ленив, чтобы опубликовать его, но теперь позвольте мне разместить его здесь:

sed -e '
   /./!b

   :loop
      $q; N
   /\n$/bloop

   h

   /\ncreate table/!{
      s/\(.*\)\n.*/\1/p
      g;s/.*\(\n\)/\1/;D
   }

   g

   y/\n_/_\n/
      s/^[^_]*/test/
   y/\n_/_\n/

' input.data

Постановка задачи для приведенного выше решения.

1
27.01.2020, 23:24

Возможно, я не правильно понял ваш вопрос, но рискну ответить.

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

Давайте попробуем это с не gnu sed:

$ cat file5
home
help
variables
compatibility

$ sed 's/./_/g' file5
____
____
_________
_____________

$ echo "one
two
three
four" |sed 's/./_/g'
___
___
_____
____

Кстати, ваш самый первый пример sed:

echo "one
two" | sed 'N;s/\n/_/g'

соответствует только следующей новой строке, а не каждой новой строке:

$ echo "one
> two
> three
> four" |sed 'N;s/\n/_/g'
one_two
three_four
0
27.01.2020, 23:24

Вы можете использовать [[:alnum:][:punct:][:blank:]]скобочное выражение:

echo "one
two" | sed 'N;s/[[:alnum:][:punct:][:blank:]]/_/g'

Выходы:

___
___

[:alnum:]соответствует всем буквенно-цифровым символам, [:punct:]соответствует всем знакам препинания и [:blank:]соответствует всем горизонтальным пробелам. Все вертикальные пробелы не учитываются и не сопоставляются.

См. онлайн-демонстрацию sed.

1
27.01.2020, 23:24

Теги

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