다음과 같은 로그 파일이 있습니다.
Mar 23 08:20:23 New file got created in sec: 235
Mar 23 08:21:45 New file got created in sec: 127
Mar 23 08:22:34 New file got created in sec: 875
Mar 23 08:25:46 New file got created in sec: 322
Mar 23 08:26:12 New file got created in sec: 639
다음과 같은 출력이 필요합니다.
Mar 23 08:20:23 : 235
Mar 23 08:21:45 : 127
Mar 23 08:22:34 : 875
Mar 23 08:25:46 : 322
Mar 23 08:26:12 : 639
내가 할 수 있는 일은 줄의 첫 번째 부분이나 마지막 부분을 찾는 것뿐입니다. 그 둘을 합칠 수가 없어요. 입력에서 원하는 출력을 어떻게 얻을 수 있나요?
답변1
컷을 다음과 같이 사용할 수 있습니다.
주문하다:
cut --complement -c17-43 file1.txt
산출:
Mar 23 08:20:23 : 235
Mar 23 08:21:45 : 127
Mar 23 08:22:34 : 875
Mar 23 08:25:46 : 322
Mar 23 08:26:12 : 639
답변2
당신은 이런 일을 할 수 있습니다
awk '{print $1,$2,$3,":",$NF}' logfile
답변3
당신은 그것을 사용할 수 있습니다 sed
:
sed -r "s/^(.{15} ?).*(.{5})$/\1\2/" logfile
제안된 대로 첫 번째 패턴을 제로 패딩되지 않을 수 있는 한 자리 날짜에 적용하고 .*
중간 패턴을 사용하여 보다 유연하게 만들었습니다.
답변4
이건 어때:
sed -e 's/^\(.\{4\}\).*\(.\{4\}\)$/\1 \2/'
(I/O 리디렉션을 파악하거나 파일 이름 등을 제공할 수 있습니다. 자세한 호출 정보는 sed(1)를 참조하세요.)
여기서는 정확히 4자를 선택했는데 원하는 숫자로 대체할 수 있습니다. 첫 번째 문자와 마지막 문자 수가 다를 수도 있습니다.
sed -e 's/^\(.\{5\}\).*\(.\{2\}\)$/\1 \2/'
그러면 각 줄의 처음 5자와 마지막 2자가 반환됩니다. 이를 추가로 매개변수화하는 방법을 알아보도록 하겠습니다.
또한 나는 grep(1)(또는 그 변형 중 하나) 대신 sed(1)을 선택했습니다. 나는 이것이 아마도 당신이 원하는 것이 아닐 것이라는 것을 알고 있습니다. 왜냐하면 당신이 sed regex가 아니라 grep regex를 요청했기 때문입니다.