텍스트 파일이 있고 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' 파일 이름