sed
곧은 따옴표를 둥근 따옴표로 변환하는 표현식을 사용하고 있습니다 . "리눅스 프로그래머 매뉴얼"을 "리눅스 프로그래머 매뉴얼"로 변환하고 싶습니다. 직선 따옴표 앞뒤에 공백이 아닌 문자가 있는지 감지하려면 이 기능이 필요합니다. 있는 경우 곧은 따옴표를 둥근 따옴표로 바꿉니다. 나는 이것을 시도했습니다 :
sed "s/\S'\S/’/"
그러나 이로 인해 공백이 아닌 문자도 대체됩니다.
Linux programme’ manual
답변1
캡처:
sed -e :1 -e "s/\([^[:space:]]\)'\([^[:space:]]\)/\1’\2/g" -e t1
(여기에서는 [^[:space:]]
비표준 Perl과 유사한 대신 사용됩니다 \S
).
의 목적은 이미 이전 교체의 일부이기 때문에 교체 되지 않는 t1
와 같은 입력을 덮어쓰는 것입니다 .X'Y'Z
s/.../.../g
Y'Z
Y’Z
Y
perl
(어디 에서 왔는지)를 사용하는 경우 \S
둘러보기 연산자를 사용할 수 있습니다.
perl -pe "s/(?<=\S)'(?=\S)/’/g"
일부 구현은 with 또는 ast-open의 with sed
와 같은 Perl과 유사한 정규식을 지원 하지만 이는 가장 일반적인 구현이 아니며 사용을 권장하는 GNU 구현 도 아닙니다 .ssed
-R
sed
-P
sed
\S
현재 로케일 문자 인코딩으로 U+2019 문자를 하드코딩하는 대신 다음을 수행할 수 있습니다.
perl -Mopen=locale -pe "s/(?<=\S)'(?=\S)/\x{2019}/g"
또는:
perl -Mopen=locale -pe "s/(?<=\S)'(?=\S)/\N{RIGHT SINGLE QUOTATION MARK}/g"
인코딩은 스크립트를 호출하는 사용자의 로케일을 기반으로 '
대체됩니다 . ’
예를 들어 ’
인코딩은 ISO8859-7 그리스어 단일 바이트 문자 집합의 경우 0xa2 바이트, UTF-8의 경우 0xe2 0x80 0x99, BIG5 또는 BIG5-HKSCS의 경우 0xa1 0xa6입니다.