sed를 사용하여 줄의 일부를 삭제하시겠습니까?

sed를 사용하여 줄의 일부를 삭제하시겠습니까?

다음 출력이 있습니다.

Date Time: June 22 12:40:00

Product User Host IP

Software User User *.***.***.***
Software1 User User *.***.***.***

sedand의 일부 기능을 시도했지만 awk작동하지 않습니다. 텍스트가 다음 방향으로 유지되기를 원합니다.

Date Time: June 22 12:40:00

Product User Host

Software User User 
Software1 User User

다음 명령이 있습니다.

$ cat Mathematica_06-* | \
  grep -w -A 4 -B 5 "AER8\|User\|User1\|User2\|User3\|User4\|User5\|User6\|User7\|User7\|User8\|User9\|User10\|User11\|User11\|User12\|User13\|User14\|User15\|User16\|User17\|User18\|User19" | \
  awk '{print $1,$3,$4,$5,$7}' | \
  egrep -v
    > Output.log

마지막에 추가를 시도했지만 egrep -v "|IP"해당 명령에 해당 줄을 넣으면 다음 출력이 표시됩니다.

Date Time: June 22 12:40:00

Softare User User 
Software User User

줄의 나머지 부분에 영향을 주지 않고 "IP" 및 "*" 부분을 제거할 수 있는 다른 방법이 있습니까?

답변1

sed 사용

sed -i -e 's/\*.*//g' -e 's/ IP//g' -e '\$^Syntax.*$d' File*

이것은 또한 작동합니다:

awk '/Date/{print $0} /^Product|^Soft/{print $1" "$2" "$3} /^$/' File*

답변2

이것은 한 가지 방법입니다 awk. 변수는 NR레코드 번호를 나타내며 첫 번째인 경우 인쇄합니다. awk필드는 1부터 계산되므로 이 이후에는 처음 3개만 필요하다는 의미입니다.

awk 'NR==1 {print;next};{print $1,$2,$3}' 

답변3

sed5행 이후의 마지막 단어와 이전 공백 또는 탭을 제거하는 데 사용됩니다 .

$ sed -E '5,$s/[[:blank:]]*[^[:blank:]]+$//' file
Date Time: June 22 12:40:00

Product User Host IP

Software User User
Software1 User User

5번째 줄에서 시작하는 각 줄의 주소를 지정 5,$하면 이 줄을 바꾸면 줄 끝에서 공백이나 탭이 아닌 문자가 뒤따르는 공백이나 탭이 제거됩니다.

관련 정보