일치하는 문자열과 일치 항목 뒤에 추가 문자열을 같은 줄에 추가합니다.

일치하는 문자열과 일치 항목 뒤에 추가 문자열을 같은 줄에 추가합니다.

제목이 다소 혼란스럽게 들리겠지만, 제 예를 통해 제 질문이 명확해지기를 바랍니다.

따라서 이름 목록이 포함된 파일(names.txt)이 있습니다. 예를 들면 다음과 같습니다.


데이비드
리차드

루프를 사용하여 다음 결과를 얻으려고 합니다.

John John
Doe David David Doe
Richard Richard.doe

sed를 사용하는 것이 올바른 명령이나 접근 방식인지는 확실하지 않지만 제가 시도한 것은 다음과 같습니다.

for i in $(cat names.txt); do sed "s/$/ $i.doe/" names.txt; done

이 접근 방식은 어느 정도 효과가 있지만 다음과 같은 반복 목록이 생성됩니다.

John John Doe David
David Doe John Doe Richard John Doe John David Doe David David Doe Richard David
Doe ·John Richard Doe·David Richard Doe·Richard Richard Doe





나는 또한 while IFS= read -r 루프를 시도했고 비슷한 결과를 얻었습니다. 위의 결과를 생성하지 않고는 각 행을 처리할 수 없는 것 같습니다.

나는 주제에서 완전히 벗어났을 수도 있지만 여기서 누군가가 도움을 줄 수 있기를 바랍니다.

미리 사과드립니다. 나는 이전에 sed를 사용했지만 더 간단한 작업을 위해 사용했습니다.

답변1

한 가지 가능한 방법은 다음과 같은 명령을 사용하는 것입니다 awk.

awk '{print $1,$1 ".doe"}' names.txt

답변2

당신은 요점을 이해합니다 sed. loop 할 필요는 없습니다 sed. 어쨌든 모든 행에 대해 반복됩니다. 그냥 교체하세요

sed 's/.*/& &.doe/' names.txt

.*전체 줄을 일치시키고 &대체 항목에 전체 일치 항목을 삽입합니다.

도구를 전환할 필요가 없으며 도구를 원래 용도에 맞게 사용하면 됩니다.

답변3

sed를 통해 완료됨

sed -r -e  "s/\s+//g" -e "s/.*/& &.doe/g" file1

산출

john john.doe
david david.doe
richard richard.doe

관련 정보