私はこれが簡単だと確信していますが、良い例が見つからないようです。ボックスの初期化システムを見つけるために/ proc / 1 / exeを解析しようとしています。 Exeはinitシステムへのシンボリックリンクですが、ファイル数を数えてみるとその中に引用符がありますが、それを削除したいと思います。残念ながら、exeには通常のアポストロフィ(U + 0027)と左右の単一引用符(U + 2018とU + 2019)が表示されます。システムによって異なります。これは、私が実行しているシェルおよび/またはそのバージョンが原因であるのか、統計ユーティリティが原因であるのか、システム自体が原因であるのかは不明です。今、これら3つの文字がすべて混ざっているのを見ました(時々一緒に混在しています)。
最終的に同じsedコマンドを使用してこれらの文字をすべて削除したいと思います。これまでは、sedを他のsedコマンドに接続しなければ、これを行うことができませんでした。
完全なexeファイルは次のとおりです。
$stat /proc/1/exe
File: '/proc/1/exe' -> '/sbin/init'
Size: 0 Blocks: 0 IO Block: 1024 symbolic link
Device: b9h/185d Inode: 76948360 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-02-01 14:52:39.101744022 -0700
Modify: 2017-01-25 12:52:20.741244423 -0700
Change: 2017-01-25 12:52:20.741244423 -0700
Birth: -
この例では一般的なアポストロフィに過ぎませんが、他の引用符も見たことがあります。だからまず必要なものを手に入れます。
$stat /proc/1/exe | grep File: | awk -F '->' '{print $2}'
'/sbin/init'
今、引用符を削除したいと思います。さまざまな種類の引用符をすべて削除する唯一の方法は、複数のsedコマンドを使用することです。
$stat /proc/1/exe | grep File: | awk -F '->' '{print $2}' | sed 's/\xe2\x80\x98//g' | sed 's/\xe2\x80\x99//g' | sed 's/\x27//g'
/sbin/init
次に、別のawkステートメントにパイプします。
$stat /proc/1/exe | grep File: | awk -F '->' '{print $2}' | sed s'/\xe2\x80\x98//g' | sed 's/\xe2\x80\x99//g' | sed 's/\x27//g' | awk -F '/' '{print $NF}'
init
私は/proc/1/commを知っているか、/proc/1/exeでlsを使用しています。問題は、3つのsedコマンドを1つにまとめる方法です。それが必要です:
開く、閉じる、またはアポストロフィがある場合は削除します。すべての状況でこれを行う必要があります。
しかし、ボックスの初期化システムを取得するためのより良いコマンド(信頼できない/ proc / 1 / commを除く)を知っている人がいる場合、またはこれらのコマンドをより効率的にすることができる人がいる場合は、プロセスで学ぶことに興味があります。
ベストアンサー1
他の人が指摘したように、PID 1の属性を決定するより良い方法があります。単一のパイプラインで複数の呼び出しを使用することはほとんど良い考えではgrep
ありません。そうでない場合はを使用してください。 (簡単)できない場合は、以下を使用してください。sed
awk
grep
sed
sed
awk
stat /proc/1/exe | sed -n '/File:/{s/.*-> *[\xe2\x80\x98]//;s/[\xe2\x80\x99].*//p;q}'