1行に1単語ずつgrepしようとしています。各行について、grep単語の前に発生したすべての内容を印刷したいと思います。
例:
echo help.me.nc.example.com is an alias for fd-nc-001.domain.com.
私が探しているのはです.nc
。それ以前のすべての内容を印刷したいと思いますhelp.me
。
echo help.me.nc.example.com is an alias for fd-nc-001.domain.com. | awk '{print $6}'
fd-nc-001.domain.com.
echo help.me.nc.example.com is an alias for fd-nc-001.domain.com. | grep .nc | awk '{print $1}'
help.me.nc.example.com
ベストアンサー1
これにより、文字列が最初に表示される位置で入力行が切り捨てられます.nc
。
sed 's/\.nc.*//'
(in内の点は.nc
エスケープする必要があります。それ以外の場合は単一の文字と一致します。.*
以降は\.nc
行の残りの部分と一致します。)
また、入力行に文字列が含まれていない場合は何も出力されません.nc
(または置換を実行すると何かが出力され、行に文字列が含まれている場合は何かが出力されます)。
sed -n 's/\.nc.*//p'
この-n
オプションは、sed
各サイクルの終わりにバッファのデフォルト出力をディセーブルにします。代わりに、p
交換コマンドに追加されたフラグは、交換がトリガーされるたびに明示的な出力を実行します。
例:
$ echo help.me.nc.example.com is an alias for fd-nc-001.domain.com. | sed 's/\.nc.*//'
help.me
$ echo help.me.XX.example.com is an alias for fd-nc-001.domain.com. | sed 's/\.nc.*//'
help.me.XX.example.com is an alias for fd-nc-001.domain.com.
$ echo help.me.nc.example.com is an alias for fd-nc-001.domain.com. | sed -n 's/\.nc.*//p'
help.me
$ echo help.me.XX.example.com is an alias for fd-nc-001.domain.com. | sed -n 's/\.nc.*//p'
(最後のコマンドには出力はありません。)
sed -n 's/\.nc.*//p'
以下を使用するのと同じことを行いますawk
。
awk 'sub(/\.nc.*/, "")'
(すべての行で置換を実行しようとしましたが、sub()
コマンドで使用されているパターンが一致する場合にのみ結果を印刷します。)
同じことですが、次のように使用しますpcre2grep
。
pcre2grep -o '.*?(*positive_lookahead:\.nc)'
(行の先頭と文字列を除くすべての項目と一致します.nc
。)
上記の代わりに(*pla:
、またはより秘密にすることができます。 GNUがある場合は、前のコマンドで代わりに使用できます。(?=
(*positive_lookahead:
grep
grep -P
pcre2grep