Проблема, с которой вы столкнулись, может быть связана с тем, что вывод находится на stderr, а не на stdout. В этом случае вы можете попробовать:
sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) /\1/'
Он должен отвечать только на второй pid.
Тогда вы могли бы сделать:
sudo forever stop `sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) /\1/'`
Протестировано с приведенной ниже командой awk, все работает нормально
awk -F '"' '{gsub(/\|/," ",$2);print $0}' filename
выход
col1|col2|col3|col4|col5|col6|col7|col8|col9|col10
value1|value2|value3|value4|value5|value6| value7 text |value8|value9|value10
Поскольку данные представляют собой правильно отформатированные данные CSV, мы можем использовать парсер CSV:
$ csvformat -d '|' file | tr '|' ' ' | csvformat -D '|'
col1|col2|col3|col4|col5|col6|col7|col8|col9|col10
value1|value2|value3|value4|value5|value6|value7 text|value8|value9|value10
При этом используется csvformat
из csvkit для переформатирования данных с разделителями|
-в данные с разделителями-запятыми -. Затем tr
используется для замены всех оставшихся символов вертикальной черты пробелами. В конце снова используется csvformat
для переформатирования данных с разделителями-запятыми -в формат с разделителями |
-.
Обратите внимание, что csvformat
будет добавлять двойные кавычки к полям только в случае необходимости, или если используется -U 1
(, и в этом случае он будет заключать двойные кавычки во все поля ).