1

私は簡単な仕事をしています:

そのような出力から:

[root@localhost:~]# racoonctl -s /var/racoon/racoon.sock ss isakmp
Destination            Cookies                           Created
89.208.102.86.500      d0a641ed0aa7bfe9:7ae3428b08fab146 2013-02-04 15:32:18

IP アドレス文字列と日付文字列のみを取得する必要があります (異なる要求で)。

IP については、次の正規表現を書きました。

[root@localhost:~]# racoonctl -s /var/racoon/racoon.sock ss isakmp | sed -ne 's/^\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*/\1/p'
89.208.102.86

しかし、日付は機能しません

[root@localhost:~]# racoonctl -s /var/racoon/racoon.sock ss isakmp | sed -ne 's/^.*\([0-9]\{4\}\(\-[0-9]\{2\}\)\{2\}\  \([0-9]\{2\}:\)\{2\}[0-9]\{2\}\)$/\2/p'
[root@localhost:~]# 

エラーがどこにあるのか理解できませんか?

また、フラグ -r を使用して /(expression/) と /{expression/} を変更したいのですが、どうすればよいかわかりません

前もって感謝します

PSまた、代替バリアントについても知っています:

[root@localhost:~]# racoonctl -s /var/racoon/racoon.sock ss isakmp |awk -F\. '/[0-9]/ {print $1"."$2"."$3"."$4}' 
89.208.102.86

[root@localhost:~]# racoonctl -s /var/racoon/racoon.sock ss isakmp | awk '/[0-9]/ {print $3 " " $4}'
2013-02-04 15:32:18

しかし、将来のハドリータスクのために、sedでやりたいです。

4

4 に答える 4

1

1.2.3.4のようなIPの場合、次のようになります。

sed -n 's%\([0-9.]+\).*%\1%p'
sed -rn 's%([0-9.]+).*%\1%p'

日付については次のとおりです。

sed -n 's%.*\ \([0-9-]\+\ [0-9:]\+\)%\1%p'
sed -rn 's%.* ([0-9-]+ [0-9:]+)%\1%p'

また、IPが常に1.2.3.4.5のようである場合(つまり、明らかにポート番号である5番目のフィールドがある場合)、sedコマンドは次のようになります。

sed -n 's%\([0-9.]\+\)\.[0-9]\+.*%\1%p'
sed -rn 's%([0-9.]+)\.[0-9]+.*%\1%p'
于 2013-02-04T16:07:54.010 に答える
1

どうですか:

# IP 
$ sed -rn '2s/\.[0-9]+ .*//p' file
89.208.102.86

# Date and time
$ sed -rn '2s/(\S+\s+){2}//p' file
2013-02-04 15:32:18

# Just date
$ sed -rn '2s/(\S+\s+){2}(\S+).*/\2/p' file
2013-02-04
于 2013-02-04T16:03:35.040 に答える
1

Cookie に空白がないと仮定すると、単純なwhile readループで実行できます。

racoonctl ... | while read -r ip cookies date; do
    # do something with "ip" and "date"
    echo $ip
    echo "$date"
done

ヘッダー行を捨てたい場合

racoonctl ... | {
    read header
    while read -r ip cookies date; do
        # do something with "ip" and "date"
        echo $ip
        echo "$date"
    done
}
于 2013-02-04T17:49:38.640 に答える
1

次の sed を使用できます。

sed -ne 's/^.*\([0-9]\{4\}\(\-[0-9]\{2\}\)\{2\} \)/\1/p'

あなたの日付を取得します。

于 2013-02-04T16:00:57.337 に答える