각 줄의 문장에 라벨 추가

각 줄의 문장에 라벨 추가

기본적으로 다음과 같은 줄이 있습니다.

TEXT1910\text0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” 

나는 그들이 다음과 같이 보이기를 원합니다 :

TEXT1910\text0001 <s> “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” </s>

다음 명령을 사용하여 작동시키려고 했습니다.

cat text.ign | sed -e 's/\(.*\) \(.*\)/ <s> \1 <\/s>\2/' | less

그러나 이는 다음을 생성합니다.

<s> TEXT1910\text0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” </s>

답변1

목표를 올바르게 설명했다면 다음을 시도해 보세요.

sed 's| | <s> |; s|$|</s>|'

예를 들어 파일로 시작하면 다음과 같습니다.

$ cat text.ign 
TEXT1910\text0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” 

그리고 다음 명령을 실행하세요.

$ sed 's| | <s> |; s|$|</s>|' text.ign
TEXT1910\text0001 <s> “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” </s>

작동 방식:

  • s| | <s> |첫 번째 공백을 로 바꿉니다 <s>.

    Sed에서는 대체 명령에서 모든 문자를 구분 기호로 사용할 수 있습니다. 여기서는 |전통적인 /.

  • s|$|</s>|</s>줄 끝에 추가하세요 .

    구분 기호로 사용하고 있으므로 |이스케이프에 백슬래시가 필요하지 않습니다 </s>.

원래 명령은 어떻게 되었나요?

우리가 가진 질문에서 :

$ sed -e 's/\(.*\) \(.*\)/ <s> \1 <\/s>\2/' text.ign 
 <s> TEXT1910\text0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” </s>

여기서 문제는 sed 정규식 일치입니다.왼쪽이 제일 길어요성냥. 이는 첫 번째 항목이 \(.*\)줄의 시작부터 줄의 마지막 공백까지 모든 것과 일치함을 의미합니다. 다른 하나는 \(.*\)마지막 공백 이후의 모든 항목과 일치합니다.

예제의 줄은 공백으로 끝나기 때문에 이는 \(.*\)전체 줄을 일치시키고 \(.*\)다른 줄에서는 아무것도 일치하지 않음을 의미합니다. 따라서 전체 줄 <s>앞과 뒤에 배치됩니다 .</s>

답변2

간단합니다. 다음을 사용하세요.

sed -Ee 's/(.*[0-9])(.*)/\1 <s>\2 <\/s>/'

귀하의 경우:

cat file | sed -Ee 's/(.*[0-9])(.*)/\1 <s>\2 <\/s>/' | less

그러나 sed 명령 다음에 파일 이름을 사용하고 파이프 사용을 피하는 것이 좋습니다. 즉:

sed -Ee 's/(.*[0-9])(.*)/\1 <s> \2 <\/s>/' file

옵션을 사용하여 파일을 직접 편집하세요 i.

답변3

$ awk '{ $1 = $1 " <s>"; $(NF+1) = "</s>"; print }' file
TEXT1910\text0001 <s> “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” </s>

<s>이는 공백으로 구분된 첫 번째 필드 뒤에 공백과 여는 태그를 추가한 다음 </s>끝에 닫는 태그를 새 필드로 추가합니다. 그런 다음 수정된 행을 인쇄합니다.

이렇게 하면 데이터의 여러 공간이 단일 공간으로 축소됩니다.

답변4

필요한 것은 다음과 같이 작동하는 html과 같은 구문으로 묶인 마지막 큰따옴표에 대한 첫 번째 큰따옴표입니다.

sed -e 's|".*"|<s> & </s>|'  inputfile

관련 정보