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