sed - как исключить несколько шаблонов в совпадении

вы также можете рассмотреть возможность использования

pgrep "you_script"

или

pgrep -f "complete_cmd_line_of_script"

"process-grep" приводит только к PID

Если вы хотите убить процесс вы обнаружили, вы также можете использовать pkill, который использует тот же синтаксис, что и pgrep

0
10.11.2013, 19:59
2 ответа

В ожидании вашего ответа на мой комментарий по вопросу вот мой ответ:

  • Во-первых, [^}. To] не делает то, что вы думаете. Он не будет не соответствовать строкам, которые не имеют шаблона }. До . Он соответствует строкам, которые содержат любой символ , кроме . , } , t или o . Другими словами, много строк.

  • Чтобы упростить задачу, пусть sed ничего не печатает по умолчанию, а затем скажет ему печатать все , кроме тех строк, которые соответствуют шаблонам, которые вы хотите исключить:

     sed -n '/\(\bend\|}\.to\)/!p' your_file 
     

Это напечатает все строки, не содержащие end.to на границе слова (т.е. allend.to не учитывается) или с }. На .

Если, кроме того, вы хотите напечатать только те строки, которые соответствуют \. Foo [[: space:]] , просто удалите строки, соответствующие нежелательным шаблонам, и добавьте условную печать:

sed -n '/\(\bend\|}\.to\)/d;/\.to[[:space:]]/p' your_file

Конечно , между совпадением и печатью вы можете применить любую замену, которая вам нравится:

sed -n '/\(\bend\|}\.to\)/d;/\.to[[:space:]]/s/foo/bar/g;p' your_file
4
29.04.2021, 00:45

В большинстве случаев это работает:

до:

sed -i 's/[^}.to].to[[:space:]]/).to /' ../_spec_seded/"$file"

после:

sed -i 's/[^}.to|end.to].to[[:space:]]/).to /' ../_spec_seded/"$file"
-1
29.04.2021, 00:45

Теги

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