2012-03-05 2 views
2

sed/bash를 사용하여 간단한 wikitext 파서를 만들려고합니다. 내가Sed 서브 표현식이 예상대로 작동하지 않습니다.

echo "London has [[public transport]]" | sed s/\\[\\[[A-Za-z0-9\ ]*\\]\\]/link/ 

을 실행하면 그것은 나에게 London has link 을 제공하지만 난 그냥 나에게 때문이다 London has [[public transport]]

답변

2

을 제공하여

sed s/\\[\\[\([A-Za-z0-9\ ]*\)\\]\\]/\1/ 

을 괄호의 내용을 얻기 위해 표시된 표현식을 사용하려고하면 정규식이 일치하지 않습니다.

sed 표현식을 따옴표로 묶지 않으므로 쉘의 슬래시를 두 번 이스케이프 처리해야합니다. 따라서 \[ 대신 \\[이 있어야합니다.

sed에서 기본 정규식 (기본 정규식)은 대괄호에서 \(\)으로 표시됩니다. 따옴표로 묶지 않고 쉘에이 내용을 입력 했으므로 백 슬래시를 이스케이프 처리해야합니다. 배쉬는 괄호를 해석하기 때문에, 당신은 그들도 탈출해야 :

난 강력하게 추천
echo "London has [[public transport]]" | sed s/\\[\\[\\\([A-Za-z0-9\ ]*\\\)\\]\\]/\\1/ 

당신은 쓰기의 편의를 위해 작은 따옴표에 나오지 식을 묶

echo "London has [[public transport]]" | sed 's/\[\[\([A-Za-z0-9\ ]*\)\]\]/\1/' 

훨씬 쉽게 맞죠? 내 컴퓨터에

+0

내 무지를 용서해주세요. 따옴표로 시도해 보면 효과가있었습니다. 빠른 답변 감사합니다 – isf

관련 문제