정말 좋은 걸 찾았어요지도 시간몇 가지 실제 sed
사례를 설명하세요.
마지막 항목(10번)은 다음과 같습니다.
$ sed -e 's/<[^>]*>//g'
This <b> is </b> an <i>example</i>.
This is an example.
누구든지 이 문제를 해결하도록 도와줄 수 있나요?
내 상황을 요약하면 다음과 같습니다. 1. 내가 이해한 것은 sed에게 "정규식을 정규식 2 s/x/y/g
로 전역적으로 바꾸도록 지시하는 명령입니다 . 이 플래그는 다음 페이지에서 sed를 일종의 "대화형 모드"로 전환하는 것처럼 보입니다 .x
y
-e
man
-e command
Append the editing commands specified by the command argument to
the list of commands.
"명령 목록" 이 제공되지 않는 것 같지만 sed
오히려 "인수 목록"이 제공되는 것 같아서 확실하지 않기 때문에 이것은 나에게 혼란스러워 보입니다. 3. 첫 번째이자 유일한 것은 <
단일 문자 정규 표현식에 지나지 않으며 <
마지막 정규 표현식은 >
단일 문자 정규 표현식에 불과하다는 것을 알고 있습니다. 4. sed가 sed에게 그 앞에 있는 패턴이 0개 이상 일치하도록 지시한다는 >
것을 알고 있습니다. *
, 이 경우에는 괄호 안에 있습니다. 하지만 여기가 정말 혼란스럽습니다. 누군가 [^>]*
나에게 더 많은 내용을 열어줄 수 있나요?
그래서 제가 정말 혼란스러워하는 점은 다음과 같습니다.
- 평범한 영어로 무슨 일이 일어나고 있나요
-e
? - 어떻게 진행되고 있나요
[^>]*
?
감사해요:)
답변1
순서 s/<[^>]*>//g
는주문하다처리 엔진 에 sed
"검색 및 교체"를 수행하라고 지시합니다. 즉 -e 's/..../g'
, "이 검색 및 바꾸기 명령을 sed
.
하나의 명령으로 여러 명령을 실행하면 더 의미가 있을 수 있습니다.
sed -e '1d' -e '$d'
sed
처리에 "첫 번째 행 삭제"와 "마지막 행 삭제"라는 두 가지 명령이 추가됩니다 .
[^>]
"를 제외하고"를 의미하는 정규식 입니다 .>
따라서 [^>]*
"를 제외한 모든 문자가 0개 이상 있음을 의미합니다.>
so 는 <[^>]*>
a <
, 선택적으로 뒤에 non- >
, 그 뒤에 를 의미합니다 >
.
그런 다음 이것을 시퀀스가 어떤 것으로도 대체되지 않는 검색 및 바꾸기 명령에 넣습니다.그 다음에연속으로 여러 번 반복합니다(마지막 시간 g
).
이는 문자열이 hello <abc> there <def>
먼저 <abc>
( <
, 그 다음 abc
"zero or more not >
" , 그 다음 " >
)과 일치하고 이를 null로 바꾼 다음 이 작업을 다시 실행함을 의미합니다 <def>
. 결과는 다음과 같습니다 hello there
.
(추가 공백은 제거되지 않으므로 주의하세요!)
답변2
범위를 두 지점으로 제한합니다.
그 뒤에 편집 명령이 있음 을 알려줍니다
-e
.sed
[^>]*
0개 이상의 문자와 일치하는 패턴 입니다 .>
특징
편집 명령은 말한다
's/<[^>]*>//g'
일치하는 콘텐츠 변경<
, 첫 번째 문자까지 임의 개수의 문자가 옵니다.>
도착하다아무것도 없다. 그리고 일치하는 횟수만큼 반복합니다.