it-swarm-ko.tech

일치하는 패턴 뒤에 줄의 일부만 반환

따라서 cat로 파일을 연 다음 grep을 사용하여 일치하는 줄을 얻으려면 내가 처리하고있는 특정 로그 세트로 작업 할 때만 가능합니다. 라인을 패턴과 일치시키는 방법이 필요하지만, 일치 후에 라인의 일부만 반환합니다. 경기 전후의 부분은 지속적으로 다릅니다. sed 또는 awk를 사용하여 게임을했지만 경기 전에 부품을 삭제하거나 경기 후 부품을 반환하도록 라인을 필터링하는 방법을 알 수 없었습니다. 둘 다 작동합니다. 이것은 내가 필터링 해야하는 라인의 예입니다.

2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.AMD64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 }

내가 필요한 부분은 "스톨"된 후의 모든 것입니다.

이것의 배경은 무언가가 얼마나 자주 멈추는 지 알 수 있다는 것입니다.

cat messages | grep stalled | wc -l

내가해야 할 일은 특정 노드가 몇 번이나 멈추었는지 알아내는 것입니다 ( "중지"후 각 콜론 앞 부분으로 표시됩니다.) 그냥 grep하면 (예 : 20 :) 소프트 실패한 줄을 반환 할 수 있지만 스톨이 없어서 도움이되지 않습니다. 스톨 된 부분 만 필터링하면 스톨 된 노드에서 특정 노드를 잡을 수 있습니다.

모든 의도와 목적을 위해, 이것은 표준 GNU 핵심 유틸리티)를 가진 freebsd 시스템이지만, 도움을주기 위해 어떤 것도 설치할 수 없습니다.

127
MaQleod

이미 사용중인 다른 표준 도구 : grep :

예를 들면 다음과 같습니다.

grep -o 'stalled.*'

Gilles의 두 번째 옵션과 동일한 결과가 있습니다.

sed -n -e 's/^.*\(stalled: \)/\1/p'

-o 플래그는 --only-matching 표현식의 일부이므로 일반적으로 grep에 의해 수행되는 전체 행이 아닙니다.

출력에서 "stalled :"를 제거하기 위해 세 번째 표준 도구 인 cut을 사용할 수 있습니다.

grep -o 'stalled.*' | cut -f2- -d:

cut 명령은 분리 문자 :하고 끝까지 필드 2를 인쇄합니다. 물론 환경 설정의 문제이지만, 기억하기 쉬운 cut 구문입니다.

83
Anne van Rossum

나는 ifconfig | grep eth0 | cut -f3- -d: 이걸로

    [[email protected] ~]# ifconfig
    eth0  Link encap:Ethernet  HWaddr AC:B4:CA:DD:E6:F8
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:78998810244 errors:1 dropped:0 overruns:0 frame:1
          TX packets:20113430261 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:110947036025418 (100.9 TiB)  TX bytes:15010653222322 (13.6 TiB)

그리고 이렇게 보이게

    [[email protected] ~]# ifconfig | grep eth0 | cut -f3- -d:
    C4:7A:4D:F6:B8
4
Luis Perez

awk라고 생각한 다른 표준 도구는 다음 줄과 함께 사용할 수 있습니다.

awk -F"stalled" '/stalled/{print $2}' messages

상해:

  • -F는 줄의 구분 기호 (예 : "중지됨")를 정의합니다. 구분 기호 앞의 모든 부분은 $1로 시작하고 뒤에 나오는 모든 부분은 $2로 지정됩니다.
  • /reg-ex/ 일치하는 정규식 (이 경우 "중지")을 검색합니다.
  • {print $<n>}-n 열을 인쇄합니다. 구분 기호가 중단 된 것으로 정의되므로 중단 된 이후의 모든 항목이 두 번째 열로 간주됩니다.
3
robertm.tum

더 간단한 방법이 있습니다. 그냥 해:

sed "s/installed.*//g"

"설치"후 모든 단어를 제거합니다.

for i in *
do
    se=$(echo $i|sed "s/---.*//g")
    echo $se
    mv "$i" $se
done
0
minor hash