2016-05-10 7 views
1

sed、awk、trなどのmuコマンドライン出力や、便利な高速ユーティリティを使ってメタキャラクタや特殊文字を削除しようとしています。また、私は..私は下記なっただけで何..作業が、コマンドの複数加えている私のレベルでいくつかのトリックを試してみましたawkまたはsedで複数のメタ文字を取り除く方法

1)最初の正確な出力がコマンド利回り..

$ getent netgroup login_access_foxone 
login_access_foxone (-,cacti,) (-,multi,) (-,hipot,) (-,jack,) 

2)以下はawkと組み合わされて出力が得られるsedのことです。

$ getent netgroup login_access_foxone | sed 's/login_access_onefarm//g' | sed 's/)/\n/g' | awk 'BEGIN {FS=","}{print $2}' | grep -v ^$ 
cacti 
multi 
hipot 
jack 

3)再びのtrコマンドを使用して、一つ下の次が、これはawkのではなく、再び二つの部分

$ getent netgroup login_access_foxone | awk -v FS="[()]" '{for (i=2;i<=NF;i+=2) print $i }' | awk -F, '{print $2}' 
cacti 
multi 
hipot 
jack 
にある

$ getent netgroup login_access_foxone | tr -d '(' | tr ')' '\n' | cut -d, -f2 
cacti 
multi 
hipot 
jack 

4)...出力を取得するためにカットを使用していました

5)SEDが、今は削除することができませんでし持つ少数のより多くのテスト「 - 」それぞれの名前の後に改行を「」&をしてもらう

空白行は、sedをしているために、コードが、agian必要性の下で、削除するために

6)いくつかの醜い組み合わせでsedを試みたが、空白を含む出力とprobleがある..です

$ getent netgroup login_access_foxone | sed 's/[-,()]/\n/g' 
login_access_foxone 


cacti 




multi 




hipot 




jack 

私はそれをアイデアを得ました別のパイプで。

$ getent netgroup login_access_foxone | sed 's/[-,()]/\n/g'|sed '/^\s*$/d' 

答えて

3

awkレスキュー!第二の代替で

$ awk -F, '{for(i=2;i<=NF;i+=2) print $i}' file 
cacti 
multi 
hipot 
jack 

または

$ awk -v RS=, '!(NR%2)' file 
cacti 
multi 
hipot 
jack 

、私たちは、カンマで区切られたミニレコードにそれぞれの行を分割します。必要なフィールドは2つのコンマの間にあるので、偶数のレコードを印刷します。これは、レコード番号を2で割り切れることを意味します。注文は自然に保存されます(そこには驚きはありません)。

+0

あなたが投稿した2番目のawkコードについて説明できますか?私はそれを答えにします。他のsed&trバージョンで見ても、専門家が選別することができます。 – rocky1981

+0

@karakafa ...よく見えます。 – rocky1981

1

あなたはsedはこれを試すことができますが、それは非常に冗長なawkに比べています:

sed 's/[^(]*(-,\([^,]*\),)/\1\n/g;s/\n$//' file 
1

私は考えることができる最短ソリューション:

grep -Po ',\K\w*'

例:

grep -Po ',\K\w*' <<< 'login_access_foxone (-,cacti,) (-,multi,) (-,hipot,) (-,jack,)' 
cacti 
multi 
hipot 
jack 

説明:

\K:見てビハインド

\w:[-ZA-Z_]

*:マッチ任意の数のあなたは見事に受注を維持し、それはのように動作します@karakafa

関連する問題