sed를 사용하여 변수를 grep하고 같은 줄에 텍스트를 삽입하여 복사합니다.

sed를 사용하여 변수를 grep하고 같은 줄에 텍스트를 삽입하여 복사합니다.

title="<text>"예를 들어 모든 변수를 grep하고 Linux의 HTML 파일 내에서 title="best-pencil"와 같은 줄에 복사하고 싶습니다 .alt="best-pencil"

<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil">

에게:

<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">

을 사용하여 이 작업을 어떻게 수행할 수 있습니까 sed?

답변1

문자열이 i) 항상 큰따옴표로 묶여 있고 절대 포함되지 않으며 " ii) 항상 한 줄에만 있을 것이라고 확신할 수 있다면 이는 간단합니다.

$ sed -E 's/title=("[^"]*")/& alt=\1/' file
<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">

비결은 다음까지 title="0 이상의 non- 을 찾아 이를 "캡처"하여(주변의 괄호가 수행하는 작업) 에서 기호 는 "일치하는 항목"을 의미합니다. , 여기서는 자체로 대체하고 그 뒤에 .""("[^"]*")\1sed&title="foo"alt="foo"

sed을 지원하지 않는 버전이 있는 경우 -E다음을 대신 사용할 수 있습니다.

$ sed 's/title=\("[^"]*"\)/& alt=\1/' file
<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">

관련 정보