tmux 복사 모드에서 문자열을 잘라냅니다.

tmux 복사 모드에서 문자열을 잘라냅니다.

이 키 바인딩을 사용하여 후행 및 헤더 공백 없이 문자열을 추출하려고 합니다.

bind-key -T copy-mode-vi z send-keys -X \
copy-pipe 'sed "s/^[[:blank:]]\+//;s/[[:blank:]]\+$//" | xsel -ib' 

하지만 작동하지 않고 xsel -ob공백이 포함된 문자열을 출력합니다. GUI 응용 프로그램의 Ctrl+V에도 동일하게 적용됩니다. 왜? 필요한 기능을 어떻게 얻을 수 있나요?

tmux 2.6, set-clipboard off

편집하다: sed 표현식을 테스트했는데 작동합니다.

igor@igor-ideapad:~$ echo "   hello world    " | sed "s/^[[:blank:]]\+//;s/[[:blank:]]\+$//"
hello world

답변1

sed -E첫 번째 + 앞에 추가 \가 있고 문자 클래스는 확장 정규식 기능이므로 (BSD sed의 경우) 또는 (GNU sed의 경우) 를 사용해야 합니다 sed -r. 왜 이 일을 하려는지는 모르겠지만 [[:blank:], \s그럴 필요는 없을 것 같습니다.

명령줄에서 sed를 사용하여 정규식을 테스트할 수 있습니다.

printf ' abc '|sed -E "s/^[[:blank:]]+//;s/[[:blank:]]+$//"|wc -c
       3

편집: 저는 실제로 ERE 및 BSD sed를 사용하는 데 너무 익숙합니다. 단, 추가 \sOP의 원래 정규식은 GNU sed에 유효한 BRE입니다.

관련 정보