Как извлечь единственное значение из однострочных кортежей?

Не полный ответ, но Вы знающий о так называемом "легком режиме Vim" (vim -y)? Это всегда находится в режиме редактирования defaut и делает довольно многое из того, что Вы хотите, и не нуждается в Вас, чтобы установить или настроить что-либо. Это делает CTRL-A, C, V, X, Y и т.д. Из ключевого списка:

Key mappings:
          moves by screen lines rather than file lines
            idem
    Q           does "gq", formatting, instead of Ex mode
            in Visual mode: deletes the selection
    CTRL-X      in Visual mode: Cut to clipboard
         idem
    CTRL-C      in Visual mode: Copy to clipboard
      idem
    CTRL-V      Pastes from the clipboard (in any mode)
      idem
    CTRL-Q      do what CTRL-V used to do
    CTRL-Z      undo
    CTRL-Y      redo
       system menu
    CTRL-A      select all
         next window, CTRL-W w
          close window, CTRL-W c

Намного более мощная версия этого является Кремовой, который повторно отображает намного больше ключей и делает основные команды подобными другим редакторам, с которыми можно быть знакомы.

Существует также сменный Vimacs, который включает все общие emacs ключевые отображения. Это легко установить и может сделать то, что Вы хотите (я никогда не пробовал его).

2
12.10.2013, 01:34
1 ответ

Помещение каждого кортежа на отдельной строке:

sed 's@)\s*,\s*(@)\n(@g' your_file

Применять модификации к файлу (вместо того, чтобы печатать измененный файл к stdout):

sed -i 's@)\s*,\s*(@)\n(@g' your_file

Сообщить только value3 (принятие измененного файла):

awk -F',' '{print $3}' <your_new_file

Это предполагает, что сами значения не содержат ,. См. комментарий Michael ниже.

Сделать все это сразу (не изменяя файл):

sed 's@)\s*,\s*(@)\n(@g' your_file | awk -F',' '{print $3}'

Упростить вышеупомянутое awk звоните, я использовал то, что, учитывая Ваш пример мы можем разделить вход на , и value3 будет 3-е значение и не иметь никакого parens в нем. Если Вы хотели value1 или value4 вместо этого, можно сделать что-то как:

sed 's@)\s*,\s*(@)\n(@g' your_file | awk -F',' '{print $1}' | sed 's/[()]//'

Это, конечно, предполагает, что Ваши значения не имеют parens в своем содержании.

3
27.01.2020, 22:06
  • 1
    Обратите внимание, что наивное решение как вышеупомянутые повреждения, если сами значения содержат запятые. Несмотря на это, +1, потому что Вы побеждаете меня к нему. положительная сторона –  a CVn 11.10.2013, 14:56
  • 2
    @MichaelKjörling. Добавленный к ответу. –  Joseph R. 11.10.2013, 14:56
  • 3
    я не могу понять значение символа в sed –  curious 11.10.2013, 15:00
  • 4
    @curious sed использование безотносительно символа Вы помещаете после s как разделитель шаблона (см. это). В этом случае я использовал @ вместо / потому что я, оказывается, думаю, что это более читаемо. Особенно полезно, если Ваш шаблон содержит / (например, в путях). Использование –  Joseph R. 11.10.2013, 15:06

Теги

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