2017-01-11 1 views
0

の端からgrepのための/ etc/passwdファイル正規表現での行の行

私が最初に行($)の端からgrep検索したい

「:」行の末尾から。例えば

、\ JOHNDOE N:X:39:39:ジョン・ドウ:は/ var/libに/カンナ:/ sbinに/ nologinに

私は "/ sbinに/ nologinに"

をgrep検索したい

私のgrepコマンドに使用する正当な正規表現は何ですか?

答えて

1

使用、その後、あまりにも選択されているコロンを気にしない場合:

grep -o -e ':[^:]*$' /etc/passwd 

他のどのコロンして、行の終わりとのみ一致するものを印刷しないでコロンを選択します。

コロンが不要で、PCREが有効になっているgrepがある場合は、Regex lookahead for 'not followed by' in grep?を参照してください。ルックアヘッドの代わりにルック・バックを行うためにそれを適応させる必要があります。それだけです。

あなたは-ogrepを持っていない場合は、(コロンを省略)の代わりにsedを使用します。

sed -n -e '/.*:\([^:]*\)$/ s//\1/p' /etc/passwd 

これはおそらく、ほとんどのポータブルソリューションです。

(MacOSのシエラ、およびMac OS X上で、/etc/passwdファイルが#で始まる上部のコメント行を持っている。彼らはそれらの任意のコロンを持っていないので、sedコマンドは、これらの行を印刷しません。これはきれいに動作します。のMacだけでなく、LinuxやUnixの他の変異体に、したがって、それはsedのない高度な(別名非ポータブル)機能を使用していません)を使用cutについて、これはもっとストレート、このためであるどのように

1

:。

echo 'johndoe:x:39:39:John Doe:/var/lib/canna:/sbin/nologin' | cut -d ':' -f 7