출력 목록에서 특정 문장의 첫 문자를 제거하는 방법

출력 목록에서 특정 문장의 첫 문자를 제거하는 방법
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

관련 정보