![다섯 번째 열의 값을 바꿉니다.](https://linux55.com/image/207328/%EB%8B%A4%EC%84%AF%20%EB%B2%88%EC%A7%B8%20%EC%97%B4%EC%9D%98%20%EA%B0%92%EC%9D%84%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
문자가 여러 개 있어요
Name 1:10:34 date short_id 10
Name 1:10:45 date short_id 10
Name 1:20:54 date short_id 20
Name 1:30:43 date short_id 30
Name 1:40:43 date short_id 40
Name 1:40:13 date short_id 40
Name 1:20:01 date short_id 20
Name 1:10:01 date short_id 10
다섯번째 열을 교체하고 싶은데 sed 's/\b10\b/user1/g'
두 번째 열을 사용하니 역시 바뀌네요
출력은 다음과 같아야 합니다.
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1
- - 갱신 - -
user1이 없으면 이름이 있을 것이고, 두 번째 열은 시간일 뿐이고 이름과는 아무런 관련이 없습니다.
이 같은
Name 1:10:34 date short_id John
Name 1:10:45 date short_id John
Name 1:20:54 date short_id Robert
Name 1:30:43 date short_id Jennifer
Name 1:40:43 date short_id Mary
Name 1:40:13 date short_id Mary
Name 1:20:01 date short_id Robert
Name 1:10:01 date short_id John
답변1
글쎄요, 안타깝게도 그건 sed
모르겠어요 . 따라서 각 사용자에 대해 또 다른 대체 파일을 작성하고 싶지 않다면 다음과 같은 변환 테이블이 있는 두 번째 파일을 사용하는 것이 좋습니다.10
John
users.txt
10 John
20 Robert
30 Jennifer
40 Mary
그런 다음 두 파일을 모두 sed
이 명령에 입력합니다.
sed '/^[0-9]* [[:alnum:]]*$/{H;d;};G;s/ \([0-9]*\)\n.*\n\1 \([[:alnum:]]*\)/ \2/;P;d' users.txt yourfile.log
번역 테이블을 먼저 읽고 보관 공간에 저장합니다. 다른 파일의 경우 번역이 포함된 예약된 공간이 추가되고 가능한 경우 교체가 수행됩니다. 그런 다음 P
첫 번째 개행 문자까지 줄만 인쇄되므로 사용자 ID를 알 수 없는 경우 잘못된 인쇄가 발생하지 않습니다.
좀 더 자세한 설명이 궁금하시다면한 파일에 정의된 콘텐츠를 다른 파일로 바꾸는 방법아니면 편하게 물어보세요.
답변2
두 가지 awk 솔루션도 있습니다.
$ awk '{$5="user"substr($5,1,1)}1' file
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1
$
$ awk '{$5="user"$5/10}1' x1
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1
$
답변3
awk 'gsub(/0/, "", $5) { print $1, $2, $3, $4, "user" $5 }' INPUT
gsub는 다섯 번째 열에서 숫자 "0"을 삭제합니다. 그런 다음 awk는 열 1-4를 인쇄하고 "user"라는 단어를 열 5와 결합합니다("user"와 $5 사이에는 ","가 없습니다).
답변4
사용sed
sed 's/\(.*\) \(.\).*/\1 user\2/' input_file
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1