AIX用のsed同等のコード

AIX用のsed同等のコード

誰かが私に以下のsedコードと同等のものを与えることができますか? Linux ではうまく動作しますが、AIX で実行すると「sed: 0602-403 /Policy Name:/!d is not a recognition function」というエラーが発生します。

sed -n '
/Policy Name:/! d
    s/.*:\s\+//
    h
    :1
    n
    /Active:\s*no/d
    /HW\//!b1
    :2
    s/.*\s\(\S*\)\s*/\1/
    G
    s/\n/\t/p
    n
    /^\s*$\|Include:/! b2
    '

入力ファイル

Policy Name:       Today

  Policy Type:       Standard
  Active:              yes
  Effective date:      01/24/2014 11:17:05
  Client Encrypt:      no
  LC/CY/Custmr:  EU         NY  Cindy
                 BU         CA  Victor
                 GU         MI  Bob
  Include:
Policy Name:       Tomorrow

  Policy Type:       Oracle
  Active:              yes
  Effective date:      01/26/2014 11:17:05
  Client Encrypt:      no
  LC/CY/Custmr:  MU         LA  Martha
                 EU         CA  Sam
  Include:
Policy Name:       Yesterday

  Policy Type:       Oracle
  Active:              no
  Effective date:      01/21/2014 11:17:05
  Client Encrypt:      no
  LC/CY/Custmr:  NV         IL  Joe

  Include:

希望の出力

Cindy    Today     Standard
Victor   Today     Standard
Bob      Today     Standard
Martha   Tomorrow  Oracle
Sam      Tomorrow  Oracle

ベストアンサー1

# define constants
SPC=`echo x | tr x '\040'`
TAB=`echo x | tr x '\011'`
 NL=

# custom regex for...
s="[$SPC$TAB]";   # horizontal whitespace
S="[^$SPC$TAB]";  # non-whitespace

# POSIX compliant sed code...
sed -ne "
   /Policy Name:/!d

   s/.*:$s\{1,\}//
   h

   :1
      n
      /Active:$s*no/d
   /HW\//!b1

   :2
      s/.*$s\($S*\)$s*/\1/
      G
      s/\n/$TAB/p
      n
      /^$s*\$/d
      /Include:/d
   b2
"  yourfile

コメント

  • AIX sed\s \S空白でも空白でもないと理解されていません。
  • POSIX sedsedあなたの場合、コマンドの前のスペースはわかりません/.../! d
  • また、\+そうでないことに注意してくださいPOSIX。正しい表現は次のとおりです。\{1,\}または、$s$s*ここで$ sは正規表現原子です。
  • \tどちらもありませんPOSIX。ここではシェル変数が$TAB便利です。
  • の作業は\|次のとおりです。私たちはそれをさまざまな部分に分け、論理を再整理する必要があります。ORsednon-POSIX

警告する

  1. shellキャラクターの周りの歴史を広げたいと思うかもしれません!d。この場合は、その領域の周りに一重引用符を使用してください。残りの変数では、拡張には$s, $S, $TAB二重引用符が必要です。
  2. 正規表現は示されているように$Saと一致します\n。しかし、NL - > TABを変更するため、コードではこれは発生しません。

おすすめ記事