sed 역참조: 각 줄을 가져와서 줄 끝에 추가합니다.

sed 역참조: 각 줄을 가져와서 줄 끝에 추가합니다.

다음 내용이 포함된 파일이 있습니다.

$ cat -n w
     1  Smith   John    12345   jsmith
     2  Jones   Robert  23456   rjones
     3  Green   Ralph   34567   rgreen
     4  Brown   Fred    45678   fbrown
     5  Orange  Mabel   56789   morang

각 줄을 가져온 다음 해당 줄의 끝에 해당 줄의 동일한 텍스트를 추가하고 싶습니다.

예 다음과 같은 출력을 원합니다.

$ cat -n w
     1  Smith   John    12345   jsmith  Smith   John    12345   jsmith
     2  Jones   Robert  23456   rjones  Jones   Robert  23456   rjones
     3  Green   Ralph   34567   rgreen  Green   Ralph   34567   rgreen
     4  Brown   Fred    45678   fbrown  Brown   Fred    45678   fbrown
     5  Orange  Mabel   56789   morange Orange  Mabel   56789   morange

역참조를 사용하여 sed 명령을 조사했지만 제대로 작동하지 않습니다.

$ sed 's/(.*)/\t\1/' wider
sed: -e expression #1, char 12: invalid reference \1 on `s' command's RHS

답변1

sed사용갈아 바수다기본적으로 \(...\)일치 항목을 캡처하려면 이스케이프가 필요합니다.

LC_ALL=C sed 's/\(.*\)/\1\t\1/' <file

또는 다음을 사용하여 -E활성화오히려(GNU sed 및 BSD sed에서 사용 가능하며 곧 표준이 될 예정임) 탈출할 수 없습니다 (...).

LC_ALL=C sed -E 's/(.*)/\1\t\1/' <file

유효하지 않은 유니코드 문자를 일치시키는 데 도움이 되도록 로케일을 설정하십시오 C.

그러나 이것이 더 잘 작동합니다 paste.

paste file file

또는 awk:

awk '{printf "%s\t%s\n", $0, $0}' <file

답변2

이 시도:

sed 's/\(.*\)/\1\t\1/' <filename>

답변3

awk 사용에 반대하지 않는다면 다음 방법을 따르세요.

awk '{print $0"\t"$0}'

관련 정보