
grep /var/log /etc/rsyslog.conf | awk '{print $2}'
出力:
/var/log/messages
/var/log/secure
-/var/log/maillog
/var/log/cron
-/var/log/spooler
/var/log/boot.log
私は結果が次のようになりたいと思います:
/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/cron
/var/log/spooler
/var/log/boot.log
を削除する必要があります-
。
答え1
grep /var/log /etc/rsyslog.conf | awk '{print $2}' | sed 's/^-//'
sed
s/^
行の先頭とハイフンを見つけて-
空の文字列に置き換えます//
。
答え2
簡単な解決策
私は質問にlinuxというタグを付けたので、GNU grepを使っているとします。次に、最も簡単な方法は、目的のテキストのみを出力grep
するように呼び出しを変更することです。
grep -o '/var/log/.*' /etc/rsyslog.conf
この-o
オプションを使用すると、grep
行全体ではなく一致する部分のみが印刷されます。そのために/.*
パターンを追加しました。これは、パスが行の最後のコンポーネントであるために機能します。
改訂する
何かがあなたがやった道に流れたらいいえ印刷するには、正規表現とgrep
呼び出しが少し異なるように見えます。
egrep -o '/var/log/\S*' /etc/rsyslog.conf
\S
これには、後に空白以外の()文字のシーケンスが含まれます/var/log/
。\S
拡張正規表現なので、呼び出しはegrep
に変わりますgrep
。 (これを使用するgrep -E
こともできます。)
欲しいならタイプ結果のリストと可能な場合重複を取り除き、結果は次のようにパイプできますsort
。
egrep -o '/var/log/\S*' /etc/rsyslog.conf | sort -u
「固有」を意味するため、-u
重複したコンテンツが削除されます。
答え3
簡単な方法は、コマンドを拡張して-
ハイフンを削除することです。
grep /var/log /etc/rsyslog.conf | awk '{print $2}' | sed 's/^-//g'
grep /var/log /etc/rsyslog.conf | awk '{print $2}' | tr -d '-'
または以下を使用してくださいawk
。
grep /var/log /etc/rsyslog.conf | awk '{sub("-","",$2);print $2}'
答え4
-
次の関数を使用して、フィールド2から先行ダッシュを削除できます。sub()
awk
grep /var/log /etc/rsyslog.conf | awk '{ sub(/^-/, "", $2); print $2 }'
削除する必要がある場合みんなフィールド 2 の先頭から始まるダッシュ:
grep /var/log /etc/rsyslog.conf | awk '{ sub(/^-*/, "", $2); print $2 }'
または、grep
次のコマンドを使用してパターンを削除して検索しますawk
。
awk '/\/var\/log/ { sub(/^-*/, "", $2); print $2 }' /etc/rsyslog.conf