sed, awk 또는 다른 명령을 사용하여 닫는 태그를 채우는 방법은 무엇입니까?

sed, awk 또는 다른 명령을 사용하여 닫는 태그를 채우는 방법은 무엇입니까?

txt다음과 같은 파일이 있습니다 .

<sss>ss<

또는

<firstword>anotherword<

나는 이것이 이렇게 보이기를 원한다.

<sss>ss</sss>

또는

<firstword>anotherword</firstword>

기본적으로 첫 번째 단어를 가져와 닫는 태그에 넣습니다.

내가 무엇을 시도했는지, 대답이 무엇인지 묻기 전에는 아무것도 생각할 수 없습니다.

답변1

입력이 있습니다:

<abc>def<
<firstword>anotherword</firstword>
<ghi>klm<

사용:

sed 's/<\([^>]*\)>\(.*\)<$/<\1>\2<\/\1>/' input

산출:

<abc>def</abc>
<firstword>anotherword</firstword>
<ghi>klm</ghi>

sed 줄은 <(because <$)로 끝나는 줄에만 영향을 미치고 첫 번째 쌍과 '><' 사이의 패턴을 캡처 <>하고 첫 번째 쌍(끝 '>' 포함)을 복사하여 끝에 모든 것을 다시 붙여 넣습니다.

답변2

다음은 Anthon의 솔루션과 본질적으로 동일한 Perl 접근 방식입니다 sed.

$ perl -pe 's/<(.+)>(.+)</<$1>$2<\/$1>/' file
<sss>ss</sss>

관련 정보