이 답변을 작성한 후 sed y//
명령을 전체 줄이 아닌 일치 항목에만 적용 할 수 있는지 알아보기 위해 인터넷 검색을 수행했습니다 . 관련있는 것을 찾을 수 없었습니다.
$ echo clayii | sed -e '/clayii/ y/clayk/kieio/'
kieiii
즉, 검색 단어 (clayii)가 입력 줄에있는 여러 단어 중 하나 일 경우 y//
명령 이 해당 단어 에만 적용 되고 나머지 줄에는 적용 되지 않도록합니다.
즉 나는 이것을 원하지 않는다 :
$ echo can sed ignore everything but the matching word - clayii |
sed -e '/clayii/ y/clayk/kieio/'
ken sed ignore everithing but the metkhing word - kieiii
그게 가능 sed
합니까? 또는 더 유능한 것을 사용해야 perl
합니까?
아니요, y
명령은 패턴 공간에서 일치하는 모든 문자에 적용됩니다. POSIX sed
문서에 따라 (내 강조) :
[ 2addr ] Y / 문자열 1 / 문자열 2 / 교체 모든 문자의 발생 문자열 1을 의 해당 문자 문자열 2 .
OSX / BSDman
페이지 :
[2addr] y / string1 / string2 / 패턴 공간 에서 string1 의 모든 문자를 string2 의 해당 문자로 바꿉니다 .
및 GNU sed info
페이지 :
Y / 소스 문자 / 최종 도착 - 문자 / 음역은 어떤 임의의 일치하는 패턴 영역 내의 문자 소스를 문자 에 대응하는 문자로 최종 도착-문자 .
물론, 보류 버퍼를 사용하여 현재 패턴 공간을 절약 한 다음 일치 만 유지하고 패턴 공간을 음역하고 복원하여 초기 일치를 결과로 대체 할 수 있습니다 (예 : 비교).
sed 'y/words/evles/' <<<'words whispered by the drows'
와
sed 'h;s/.*\(drows\).*/\1/;y/words/evles/;G;s/\(.*\)\n\(.*\)drows\(.*\)/\2\1\3/' <<<'words whispered by the drows'
그러나 패턴 / 요구 사항을 추가하기 시작하자마자 복잡해집니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다