다음과 같이 여러 개의 로그 파일을 생성했습니다.
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George Armani;Springfield
문자열을 삭제하고 싶어요아르마니하지만 내 명령이 작동하지 않습니다.
cat file.log | grep identifier | cut -d ";" -f | sort | uniq | grep -o '^\S*' > newfile.log
다음 사람을 팔로우하고 있어요우편 엽서
다른 방법이 있나요?
추신. 동일한 필드에 길이가 다른 문자열이 있습니다.
답변1
사용 awk
:
awk -F\; 'OFS = ";"{ if ($4 ~ " "); split($4, fname, / /); $4=fname[1]; print }' input
그러면 네 번째 열이 공백으로 분할된 다음 첫 번째 요소로 설정됩니다.
이는 네 번째 열의 내용에 관계없이 작동합니다.
$ cat input
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George Armani;Springfield
02/02/02;777;blabla;Jesse_b;South Park
03/03/03;888;blabla;test name;somewhere
$ awk -F\; 'OFS = ";"{ if ($4 ~ " "); split($4, fname, / /); $4=fname[1]; print }' input
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George;Springfield
02/02/02;777;blabla;Jesse_b;South Park
03/03/03;888;blabla;test;somewhere
답변2
파일에서 "Armani" 텍스트를 제거하려면 다음 명령을 사용하십시오.
$ sed 's/Armani//' myfile
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George ;Springfield
$
그 자리에서 편집하려면:
$ sed -i 's/Armani//' myfile
$ cat myfile
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George ;Springfield
$
삭제하고 싶다면모두"Armani"가 한 줄에 나타나면 하나를 추가하세요 g
.sed 's/Armani//g'
답변3
고양이는 아무 의미가 없으므로 갈 수 있습니다. 식별자는 예시 입력에 없으므로 blabla를 의미한다고 가정합니다. 사용자의 성을 제거하라는 귀하의 요청은 예제 명령과 전혀 관련이 없는 것 같으므로 이를 변경해 보겠습니다.
grep blabla file.log | perl -pe 's/ [^ ;]+;/;/g' > newfile.log
이것이 귀하의 요구 사항을 충족하지 않는 경우 명확하게 하기 위해 질문을 다시 작성해야 합니다.