Если вы просто хотите заменить первое вхождение .com
на .org
, все, что вам нужно, это поведение по умолчанию оператора sed s///
. Только не используйте флаг g
:
$ sed 's/.com/.org/' file
foobar@example.org foo@example.com,bar@example.com
Если вы действительно хотите внести изменения только в первое поле, определенное запятой -, чтобы, если первое .com
появилось в другом месте строки, оно осталось неизменным, вы можете сделать что-то вроде:
$ perl -pe 's/^(\S+)\.com/$1.org/' file
foobar@example.org foo@example.com,bar@example.com
Или, что безопаснее, если com
встречается как подстрока (, например.foo.common.net
):
$ perl -pe 's/^(\S+)\.com\b/$1.org/' file
foobar@example.org foo@example.com,bar@example.com
Альтернативно, в GNU sed:
$ sed -E 's/^(\S+)\.com\b/\1.org/' file
foobar@example.org foo@example.com,bar@example.com
Или, переносимо (, предполагая, что первое поле определяется первым пробелом , а не табуляцией или другим пробелом):
$ sed -E 's/^([^ ])\.com /\1.org /' file
foobar@example.org foo@example.com,bar@example.com
Если вы обнаружите несколько подключений с использованием одной и той же комбинации локального IP-адреса и локального порта, значит, эта система была пассивной конечной точкой при формировании этих подключений. Когда для исходящего соединения используется комбинация локальный порт + локальный IP-адрес, ни один другой процесс обычно не может использовать тот же локальный порт с тем же локальным IP-адресом для чего-либо еще.
После установления соединение TCP должно быть полностью симметричным, поэтому может не быть атрибута, связанного только с самим соединением, который мог бы указать, было ли соединение установлено во входящем или исходящем направлении :, если вы обнаружите прослушивающий сокет или другие соединения, использующие ту же пару локальных IP+портов, вы можете быть уверены, что все эти соединения являются входящими.
Но если вы видите только одно соединение и нет соответствующего прослушивающего сокета, вы не можете быть уверены. Возможно, это исходящее соединение или, возможно, это последнее оставшееся входящее соединение со службой, которая в настоящее время находится в процессе закрытия и уже перестала ожидать новых соединений.
Можно применить некоторые эвристики, основанные на номерах портов. :Если локальный номер порта находится в диапазоне, указанном в /proc/sys/net/ipv4/ip_local_port_range
, существует высокая вероятность того, что это исходящее соединение; или если он меньше 1024, это, вероятно, входящий, если вы не используете устаревшую службу, которая требует исходящего подключения к ней, должно исходить из корневого -единственного порта (. Я думаю, что некоторые службы NIS или что-то подобное имеют /было это требование ).