Это перестало работать, потому что Вы работаете ps u
. От man ps
:
u Дисплей, ориентированный пользователями на формат.
Это означает это ps
только перечислит процессы, принадлежавшие текущему пользователю. Когда Вы запускаете скрипт вручную, тот пользователь - Вы так, Ваш процесс перечислен правильно.
(Как @Gilles очень правильно указанный, использование -A
заставит все процессы быть распечатанными так, чтобы объяснение было просто неправильным. pgrep
еще лучше хотя).
Так или иначе лучший способ сделать это состоял бы в том, чтобы использовать pgrep
:
pgrep, pkill - look up or signal processes based on
name and other attributes
Изменение
w=`ps u -A | grep -P ".+Sl.+/usr/local/MySource/endpoint" -c`
кому:
w=`pgrep -c endpoint`
Если вы не присоединились к линиям \ N
не отображаются в SED
пространство шаблонов: анкер в конце концов $
.
Так с GNU SED:
sed -i 's/$/|/' temp.txt
Вы можете использовать GNU SED
:
sed -i 's/.*/&|/' file
Специальный символ &
соответствует шаблону, совпадающему в RHS.
Можно использовать вставку
:
$ :|paste -d'|' file - > new_file
one|two|three|four|five|
abc|def|pqr|lmn|xyz|
или perl
:
perl -i.bak -ple '$_.="|"' file
С помощью GNU sed
можно заменить конец строки на |
, используя:
sed -i 's/$/|/' temp.txt
Это совпадет с концом строки и "заменить" его на |
, но, конечно, строка все равно закончится и сохранит свой \n