![열의 시작 부분에 작은따옴표를 넣으세요.](https://linux55.com/image/187037/%EC%97%B4%EC%9D%98%20%EC%8B%9C%EC%9E%91%20%EB%B6%80%EB%B6%84%EC%97%90%20%EC%9E%91%EC%9D%80%EB%94%B0%EC%98%B4%ED%91%9C%EB%A5%BC%20%EB%84%A3%EC%9C%BC%EC%84%B8%EC%9A%94..png)
열이 공백으로 구분된 출판물이 포함된 .txt 파일이 있습니다. 다만 헤더에도 공백이 있어서 열을 제대로 구분하려면 헤더를 모두 따옴표로 묶어야 합니다. 현재 내 데이터(example.txt)는 다음과 같습니다.
1y4w 0 'my title no. 1' journal 344 471 480 2004 CODE UK 0022-2836 0070 ? 15522299 16.8768/urlspub714
1y4w 1 'my title no. 2' 3620131
1y44 0 'my title, no. 3.' journal 433 657 661 2005 CODE UK 0028-0836 0006 ? 15654328 10.1038/papukaj03284
2y42 1 ;my title no. 4. ' 'journal' 66 738 ? 2010 ? DK 1744-3091 ? ? 20516614 10.1107/S174430911001626X
1y4p 0 'my title no.5. ; journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? 15835899 10.1021/bi047813a
1y4p 0 my title no.6. ; journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? ? ?
그래서 내 생각은 다음과 같습니다.
- 제목의 첫 번째 단어 앞에 작은따옴표를 추가한 다음
- 컬럼 전체 교체.
첫 번째 요점에만 문제가 있습니다. 열별로 보는 방법을 모르기 때문에 두 번째 접근 방식을 생각했습니다. 각 행(올바르게 기록된 경우)은 7자 문자열로 시작하고, 아직 문자열이 없으면 뒤에 따옴표를 붙이고 싶습니다. 문자열은 4자(소문자 또는 숫자), 공백, 숫자[0-9], 또 다른 공백입니다.
내 최선의 시도는 다음과 같습니다
sed -r "s/([a-z0-9]\{4\}\s[0-9]\s)'?;?/\1'/g" example.txt >> example_corr.txt
그러나 그것은 아무것도 바꾸지 않습니다. 또한 -r
출력 오류를 제거하려면 다음을 수행하십시오.
sed: -e expression #1, char 51: invalid reference \1 on `s' command's RHS
저는 UNIX와 정규식을 처음 접했기 때문에 도움이나 설명을 주시면 감사하겠습니다.
PS 저는 SSH가 내장된 Windows 10을 사용하여 Linux 장치에 연결하고 있습니다.
업데이트(해결됨)(열이 있는 테이블이 아님):
sed -E "s/([a-z0-9]{4}\s[0-9]\s)'?;?/\1'/g" example.txt >> example_corr.txt
이제 내 출력은 위의 1번 항목에서 예상한 것과 같습니다.
1y4w 0 'my title no. 1' journal 344 471 480 2004 CODE UK 0022-2836 0070 ? 15522299 16.8768/urlspub714
1y4w 1 'my title no. 2' 3620131
1y44 0 'my title, no. 3.' journal 433 657 661 2005 CODE UK 0028-0836 0006 ? 15654328 10.1038/papukaj03284
2y42 1 'my title no. 4. ' 'journal' 66 738 ? 2010 ? DK 1744-3091 ? ? 20516614 10.1107/S174430911001626X
1y4p 0 'my title no.5. ; journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? 15835899 10.1021/bi047813a
1y4p 0 'my title no.6. ; journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? ? ?
답변1
그룹 캡처 없이 이것을 시도해 볼 수 있습니다:
sed -e "s/ [ ';]*/ '/2" -e "s/ ; /' /" file
산출:
1y4w 0 'my title no. 1' journal 344 471 480 2004 CODE UK 0022-2836 0070 ? 15522299 16.8768/urlspub714
1y4w 1 'my title no. 2' 3620131
1y44 0 'my title, no. 3.' journal 433 657 661 2005 CODE UK 0028-0836 0006 ? 15654328 10.1038/papukaj03284
2y42 1 'my title no. 4. ' 'journal' 66 738 ? 2010 ? DK 1744-3091 ? ? 20516614 10.1107/S174430911001626X
1y4p 0 'my title no.5.' journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? 15835899 10.1021/bi047813a
1y4p 0 'my title no.6.' journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? ? ?