![여러 번 발견된 패턴에 대해 다른 대체 텍스트를 사용하는 방법 [중복]](https://linux55.com/image/11822/%EC%97%AC%EB%9F%AC%20%EB%B2%88%20%EB%B0%9C%EA%B2%AC%EB%90%9C%20%ED%8C%A8%ED%84%B4%EC%97%90%20%EB%8C%80%ED%95%B4%20%EB%8B%A4%EB%A5%B8%20%EB%8C%80%EC%B2%B4%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%20%5B%EC%A4%91%EB%B3%B5%5D.png)
예제 로그 파일:
apple AAA rose
banana AAA tulip
orange AAA marigold
텍스트 파일 바꾸기:
111
222
333
예상 출력:
apple 111 rose
banana 222 tulip
orange 333 marigold
답변1
고양이의 가죽을 벗기는 방법에는 여러 가지가 있습니다. 두 파일 간의 연결이 1번 라인에 있다고 가정해 보겠습니다. 예를 들어 다음과 같이 paste
행을 함께 배치한 다음 AAA
정규식을 사용하여 "역참조"가 포함된 필드로 후행 단어를 이동합니다.
paste sample_log replacement-text | sed -r 's/AAA ([^[:space:]]*[[:space:]]*)(.*$)/\2 \1/'
apple 111 rose
banana 222 tulip
orange 333 marigold
또는 awk
대체 항목을 배열로 읽어온 다음 두 번째 필드를 해당 배열 요소로 바꾸는 방법은 다음과 같습니다.
awk 'NR==FNR {T[NR] = $0; next } {$2 = T[FNR]} 1' replacement-text sample_log
apple 111 rose
banana 222 tulip
orange 333 marigold
답변2
#!/bin/bash
paste logfile.txt replacement.txt | while IFS= read -r line; do
echo $line | sed "s/`echo $line | awk '{print $2}'`/`echo $line | awk '{print $4}'`/g" | awk '{print $1 " " $2 " " $3 " "}'
done