sed를 사용하여 변경 가능한 정수가 포함된 문자열 바꾸기

sed를 사용하여 변경 가능한 정수가 포함된 문자열 바꾸기

텍스트 파일이 있고 sed를 사용하여 다음 문자열("s" 포함)을 바꾸고 싶습니다.

" rel="lightbox[1846]" title="

그리고

#

[과 사이의 숫자는 ]가변적이며 변경됩니다.

"대체품에 포함시키고 싶습니다 .

나는 와일드카드에 대해 읽었고 .그것이 어떤 식으로든 도움이 될 것이라고 생각했습니다. - *내가 익숙했던 것과는 다릅니다.

답변1

sed -E 's/" rel="lightbox\[[0-9]+\]" title="/#/g' filename

답변2

sed실제로 작업에 적합한 도구이며 s명령(가장 일반적으로 사용되는 명령)이 있습니다.

셸의 파일 이름에 대한 와일드카드와 와 같은 도구의 정규 표현식은 구문이 grep다릅니다 sed. 바라보다내 정규 표현식이 X에서는 작동하지만 Y에서는 작동하지 않는 이유는 무엇입니까?차이점 요약.

대체할 텍스트에서 [정규식의 특수 문자는 그 자체를 나타냅니다. 특수 문자이므로 \[(백슬래시를 사용하면 특별한 의미 없이 다음 문자를 대신하게 됨)와 같이 작성해야 합니다.

숫자 시퀀스는 [0-9]*: [0-9]"모든 숫자"를 의미하며 *"이전 문자 또는 문자 집합을 0회 이상 반복"을 의미합니다.

그러므로:

sed 's/" rel="lightbox\[[0-9]]" title="/#/' <old-file >new-file

작은따옴표로 인해 쉘은 그 사이의 모든 내용을 문자 그대로 명령에 전달합니다 sed.

답변3

어때요?

sed 's/^" rel=.*title="/#/g' filename

이는 질문에 인용한 .및 을 활용하여 *가변 가능한 문자열 중간의 문자를 일치시킵니다. 귀하가 지정하는 원하는 결과를 달성하는 것으로 테스트되고 알려져 있습니다.

문자열의 시작과 끝에서 작은 텍스트 샘플만 사용했지만 의도치 않게 원치 않는 문자열과 일치할 가능성이 있는 경우 더 정확할 수 있습니다.

답변4

sed 's/" rel="lightbox[[0-9]+]" title="/#/g' 파일 이름

하지만 Perl에서 사용하려면 아래와 같이 사용해야 합니다.

`sed 's/" rel="lightbox\[[0-9]+\]" title="/#/g' 파일 이름

관련 정보