Как поставить кавычки в задании ANS с помощью grep, awk, sed

touch newFile
echo -n "$(cat file1)" > newFile
echo -n $userInput >> newFile
cat file2 >> newFile

Это сделало трюк.

1
задан Anzel 18 January 2019 в 21:15
поделиться

2 ответа

Спасибо Мэтью за это решение, но я нашел отличный вариант, чтобы избежать ненужных результатов. Так что синтаксис почти такой же, но я добавил к --format дополнительный параметр ppid Идентификатор родительского процесса, в большинстве случаев я считаю, что родительский процесс всегда имеет номер 1 в выводе, что помогает сортировать его так, как я хочу.

Это выглядит следующим образом:

  shell: >
    ps -e --format="ppid pid cmd" |
    grep process.cfg |
    sed -e "s/[[:space:]]\+/ /g"
  register: output_process

И вывод выглядит следующим образом:

 1 54345 /var/local/bin/application -c /var/local/etc/process.cfg
6435 6577 grep --color=auto process.cfg

Теперь легко использовать для сортировки ансибельные модули:

- name: Kill process
  become: yes
  shell: "kill {{ output_process.stdout_lines[0].split(' ')[2] }}"

Что это делает? он выбирает строку 0, которая является первой строкой, разделяет вывод между пробелами и выбирает третью фразу. В выходных есть :space: до ppid, поэтому PID является третьим

Еще раз спасибо за ваше решение Мэтью, это может быть полезно в другом случае.

0
ответ дан Anzel 18 January 2019 в 21:15
поделиться

Но я думаю, что у ansible есть проблемы с 2 greps в 1 команде

То есть точно неверно

, если я не использую обратный "grep -v color", эта раздражающая вещь появляется "grep --color = auto", я не могу вырезать PID, который мне нужен в другой задаче, которая убивает процесс, потому что реальный процесс находится во второй строке.

Вы сталкиваетесь с классическим случаем процесса grep, совпадающего с собственным регулярным выражением, как это будет происходить во многих «простых» случаях. То, что вы хотите, это регулярное выражение, которое соответствует вашей строке, но не соответствует самому себе. В приведенном выше примере это будет:

  shell: 'ps -e --format="pid cmd" | grep process[.]cfg | sed -e "s/[[:space:]]\+/ /g"'

, потому что process[.]cfg соответствует process.cfg, но не соответствует process[.]cfg. Я также исправил ваше регулярное выражение, потому что в регулярном выражении . означает любой символ, что не похоже на то, что вы действительно хотели бы получить

Что касается этого бита --color, вы, вероятно, можете обойти эту глупость, используя полный путь к grep, что приведет к bash для реального выполнения двоичного файла, в отличие от некоторого псевдонима, который использует --color=auto; На самом деле я бы не ожидал, что цвета будут отображаться в заданном порядке, потому что это не правильно $TERM, но системы странные

0
ответ дан Matthew L Daniel 18 January 2019 в 21:15
поделиться
Другие вопросы по тегам:

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