클립보드의 텍스트에서 부분적으로 서식을 제거합니다.

클립보드의 텍스트에서 부분적으로 서식을 제거합니다.

클립보드에 포함된 텍스트의 서식을 제거하고 일부 요소는 유지해야 합니다. 가장 중요한 것은 "New Line" 문자입니다. 간단한 스크립트에서 효과는 다음과 같습니다

variable=$(xsel --clipboard)

문제는 텍스트가 모두 같은 줄에 있는 것처럼 보이므로 "개행" 문자가 모두 손실된다는 것입니다.

1) 이것을 피할 수 있는 방법이 있나요? 때로는 Windows 형식(따라서 개행 문자는 "\r\n")에서 텍스트를 복사하고 때로는 *nix(따라서 개행 문자는 "\n")에서 텍스트를 복사합니다.

2) 이전 질문이 가장 중요합니다. 그러나 "굵게", "기울임꼴" 및 "밑줄" 서식 요소를 유지하는 방법도 있습니까? 이러한 쉘 명령도 손실되기 때문입니다.

아무튼 감사 해요!

답변1

예. 명령 대체는 모든 후행 개행 문자 1 을 제거합니다 .

이 문제를 해결하려면:

var=$(xsel --clipboard; echo .)
var=${var%?}

.\n해당 출력에 추가됩니다 . 그런 다음 ${var%?}( \n명령 대체에 의해 처리됨)을 사용하여 점을 삭제하십시오 .

을 제외하고 zsh쉘 변수는 NUL 바이트를 포함할 수 없습니다.

종료 상태를 유지하려면 다음을 수행하십시오.

var=$(xsel --clipboard; ret=$?; echo .; exit "$ret")
ret=$?
var=${var%?}

$var확장할 때 인용하는 것을 잊지 마세요:

printf %s "$var"

도우미 기능:

cmdsubst() {
  _var=$1; shift
  eval "$_var="'$("$@"; ret=$?; echo .; exit "$ret")
    _ret=$?
    '"$_var=\${$_var%?}"
  return "$_ret"
}

다음과 같이 사용됩니다:

cmdsubst var xsel --clipboard

"굵게"를 유지하기 위해... 일부 도구는 UTF8 문자열 외에 CLIPBOARD 선택 항목을 text/html로 내보냅니다. 이 경우(최신 버전 사용 xclip) 다음을 수행할 수 있습니다.

cmdsubst html xclip -sel c -o -t text/html

xclip -sel c -o -t TARGETSCLIPBOARD 선택의 현재 소유자가 제공한 선택 대상을 보려면 출력을 봅니다 .

위의 iceweasel에 있는 Mikel의 게시물에 내 댓글의 일부를 복사한 후의 예:

$ xclip -sel c -o -t TARGETS
TIMESTAMP
TARGETS
MULTIPLE
SAVE_TARGETS
text/html
text/_moz_htmlcontext
text/_moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
TEXT
STRING
text/x-moz-url-priv
$ xclip -sel c -o -t text/html
<span class="comment-copy"><i>should</i> remove <i>only one</i> trailing newline</span>
$ xclip -sel c -o -t TEXT
should remove only one trailing newline

1한 가지 예외는 이 쉘 제품군으로, 이 구문을 사용하여 사후 처리를 수행하고 rc싶지 않다고 말할 수 있습니다 .var = ``(){xsel --clipboard}

관련 정보