다음 줄이 포함된 텍스트 파일이 있습니다.
[...]
GFX Clocks and Power:
800 MHz (MCLK)
26 MHz (SCLK)
[...]
일부(값이 일정하지 않음)를 추출하고 싶어서 제거 하고 사용하고 800 MHz
싶습니다 .\t
(MCLK)
sed
이것은 내 현재 명령입니다.
$ cat ~/test.txt | grep "(MCLK)" | xargs -0 sed -i -e $'s/\t//g' -e 's/\(MCLK\)//g'
실행 시 다음을 반환합니다.
sed: can't read 800 MHz (MCLK)
: No such file or directory
이것은 개행 오류도 아니고 \t
비표준 문자에 대한 문제 도 아닌 것 같습니다 sed
(참조.간단한 sed 탭 교체가 이상하게 실패함)을 수정해야 합니다.
무엇이 문제일까요?
답변1
당신이 가지고 있다면 pgrep
:
grep -Po '[0-9]+ [KMGT]?Hz(?= \(MCLK\))' test.txt
답변2
xargs
입력을 가져와서 주어진 명령에 대한 인수로 변환합니다. grep
관심 있는 줄을 반환하고 파일 이름을 기대하는 명령 xargs
에 해당 줄을 인수로 추가합니다 . 전혀 그럴 필요가 없습니다 sed
.xargs
sed
패턴과 일치하는 행에서만 작동 하도록 지정할 수 있습니다 .
sed -i~ -e '/(MCLK)/{s/\t//g' -e 's/(MCLK)//g}' ~/test.txt
답변3
이 시도,
sed '/(MCLK)/ s/(MCLK)//g;s/\t//' test.txt
800 MHz
/(MCLK)/
키워드가 검색됩니다.s/(MCLK)//g
삭제됩니다(MCLK)
.s/\t//
탭이 삭제됩니다.
-i
인라인 편집에 옵션을 사용할 수 있습니다 .
편집된 질문에,
awk -F '[$\t ]' '/(MCLK)/ {print $2" "$3}' test.txt
800 MHz
답변4
다음 명령을 사용해보십시오. 잘 작동합니다.
주문하다
sed -n '/MCLK/p' filename| sed -r "s/^\s+//g"| sed -r "s/\(MCLK\)//g"
산출
sed -n '/MCLK/p' filename| sed -r "s/^\s+//g"| sed -r "s/\(MCLK\)//g"
800 MHz