2

(ホスト名、、)形式のネットグループからホスト名を抽出したい。次のsedコマンドを使用しました。それらのどれも機能しないようです。誰かが正しい正規表現の構造を教えてくれますか? ありがとう。

bash-3.2# ypcat -k netgroup|grep '^gridprod2 '|sed 's/(\([a-zA-Z0-9]*\),,)/\1\n/g'
gridprod2 (sbpsvrso766,,) (sbpsvrso767,,) (sbpsvrso768,,) (sbpsvrso769,,) (sbpsvrso461,,) (sbpsvrso462,,) (sbpsvrso463,,) (sbpsvrso464,,) (sbpsvrso465,,) (sbpsvrso466,,) (sbpsvrso467,,)  (sbpsvrso468,,) (sbtorsvr569,,) (sbpsvrwm841,,) (sbpsvrwm842,,) (sbpsvrwm843,,) (sbpsvrwm844,,) (sbpsvrwm845,,) (sdpsvrso804,,)

bash-3.2# ypcat -k netgroup|grep '^gridprod2 '|sed 's/(\([:alnum:]*\),,)/\1\n/g'
gridprod2 (sbpsvrso766,,) (sbpsvrso767,,) (sbpsvrso768,,) (sbpsvrso769,,) (sbpsvrso461,,) (sbpsvrso462,,) (sbpsvrso463,,) (sbpsvrso464,,) (sbpsvrso465,,) (sbpsvrso466,,) (sbpsvrso467,,)  (sbpsvrso468,,) (sbtorsvr569,,) (sbpsvrwm841,,) (sbpsvrwm842,,) (sbpsvrwm843,,) (sbpsvrwm844,,) (sbpsvrwm845,,) (sdpsvrso804,,)
4

2 に答える 2

0

代わりに後読みで使用grep -oPします。

echo "gridprod2 (sbpsvrso766,,) (sbpsvrso767,,) (sbpsvrso768,,) (sbpsvrso769,,) (sbpsvrso461,,) (sbpsvrso462,,) (sbpsvrso463,,) (sbpsvrso464,,) (sbpsvrso465,,) (sbpsvrso466,,) (sbpsvrso467,,)  (sbpsvrso468,,) (sbtorsvr569,,) (sbpsvrwm841,,) (sbpsvrwm842,,) (sbpsvrwm843,,) (sbpsvrwm844,,) (sbpsvrwm845,,) (sdpsvrso804,,)" \
| grep ^gridprod2 | grep -oP '(?<=\()[^,\)]*'

出力:

sbpsvrso766
sbpsvrso767
sbpsvrso768
sbpsvrso769
...

そして、おそらくより正確なのは

grep -oP '(?<=\().*?(?=,,\))'
于 2013-09-20T14:51:44.213 に答える
0

awkバージョン:

awk -F, 'NR>1 {print $1}' RS="(" file
sbpsvrso766
sbpsvrso767
sbpsvrso768
sbpsvrso769
.....
于 2013-09-21T07:45:26.047 に答える