私はそれについて多くの質問があることを知っていますが、それを動作させることはできません。
グループ(例:)を使用または削除したいですroot
。だから後ですべて削除する必要があります。/etc/group
sed
awk
root:*:0:
私は以下を使用してそれを削除しようとしました。
cat /etc/group | awk '!p;/^root:*:0:/{p=1}'
そして
cat /etc/group | sed 's/root\:\*\:0\:.*//'
ただし、sed
行root
全体を削除してください。
私は何が間違っていましたか?
答え1
sedでアドレスを使用して、作業する行を制限できます。
sed '/^root:/s/:[^:]*$/:/' /etc/group
で始まる行の場合、行root:
の最後の文字以降のすべての文字が削除されます:
。
(/etc/group
レコードには:
4つの区切り列しかないため、最後の列とその中のすべてのグループメンバーが削除されます。)
答え2
そしてawk
:
awk 'BEGIN{OFS=FS=":"} $1=="root"{$NF=""} 1' /etc/group
フィールドを分割し、:
最初のフィールドがある場合は、最後のフィールドを空の文字列に設定しますroot
。
答え3
これが実際に単純なテキスト処理ツールを使用して行われるべきかどうかに関する質問とは別に、sed
「replace」コマンドが次のものを置き換えるため、呼び出すと行全体が消去されます。全体代替パターンを見つけます(あなたの場合は空の文字列)。
ライン操作のための最小限の修正sed
は次のとおりです。
sed 's/root:\*:0:.*/root:*:0:/' /etc/group
または、キャプチャグループを使用します。
sed 's/\(root:\*:0:\).*/\1/' /etc/group
(ただし、cat
ファイルをコマンドライン引数として提供または使用する場合は必要ありません。)sed
awk
しかし、@Shawnによって提案された解決策はこれに関してよりエレガントです。