誰かが私に以下の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
sed
sed
あなたの場合、コマンドの前のスペースはわかりません/.../! d
。- また、
\+
そうでないことに注意してくださいPOSIX
。正しい表現は次のとおりです。\{1,\}
または、$s$s*
ここで$ sは正規表現原子です。 \t
どちらもありませんPOSIX
。ここではシェル変数が$TAB
便利です。- の作業は
\|
次のとおりです。私たちはそれをさまざまな部分に分け、論理を再整理する必要があります。OR
sed
non-POSIX
警告する
shell
キャラクターの周りの歴史を広げたいと思うかもしれません!d
。この場合は、その領域の周りに一重引用符を使用してください。残りの変数では、拡張には$s, $S, $TAB
二重引用符が必要です。- 正規表現は示されているように
$S
aと一致します\n
。しかし、NL - > TABを変更するため、コードではこれは発生しません。