出力リストから特定の文の最初の文字を削除する方法

出力リストから特定の文の最初の文字を削除する方法
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/^-//'

seds/^行の先頭とハイフンを見つけて-空の文字列に置き換えます//

答え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

関連情報