두 단어 사이의 공백만 제거

두 단어 사이의 공백만 제거

나는 다음을 가지고 있습니다

"/x/x y/asfas/g.pdf          " "fdfdf
"/x/y/yy    y/d.doc    " "fdfdf
etc..

확장자와 " ONLY 사이의 공백을 제거하고 싶습니다.

후행 공백을 제거 하는 데 사용하면 tr사이에 1개 이상의 공백이 있는 공백이 제거됩니다(예: yy y가 됨 yy y).

답변1

암소 비슷한 일종의 영양sed방법:

sed 's/\([^.]*\.[^."[:space:]]*\)[[:space:]]\+"/\1"/' file

  • \([^.]*\.[^."[:space:]]*\)- 첫 번째 캡처된 그룹에는 확장자를 가진 가상의 파일 이름이 포함되어 있습니다.

  • [[:space:]]\+"- 사이에 최소한 하나의 공백이 있는지 확인하십시오.확장하다그리고"

답변2

다음을 수행할 수 있습니다.

sed 's/\(\.[^"[:blank:]]*\)[[:blank:]]*"/\1"/g'

즉, 다음 공백 시퀀스를 삭제 .한 다음 공백이 아니거나 문자가 아닌 일련의 시퀀스를 삭제한 "다음"

이전 공백을 모두 제거합니다.다른각 줄에 큰따옴표 문자를 사용하면 다음을 수행할 수 있습니다.

sed 's/[[:blank:]]*"/"&/g
     s/\(\([^"]*"\)\{3\}\)[[:blank:]]*"/\1"/g
     s/"\([^"]*"\)/\1/g'

그건:

  1. "각 앞에 추가 항목을 삽입하세요.<blanks>"
  2. <X>"<blanks>"<Y>"<blanks>"모두 다음으로 변경<X>"<blanks>"<Y>""
  3. "1에서 삽입을 취소하려면 다른 모든 항목을 삭제하세요.

아니면 좀 더 직접적인 방법으로 awk:

awk -F \" -v OFS=\" '
  {
    for (i = 2; i <= NF; i += 2 )
      sub(/[[:blank:]]*$/, "", $i)
    print
  }'

tr이 옵션을 사용하지 않으면 문자가 압착되지 않습니다 . -s아마도 포함된 출력의 매개변수 확장이나 명령 대체를 인용하는 것을 잊었을 가능성이 큽니다 tr.

어쨌든 tr이 작업에는 사용할 수 없습니다. 그것은 단지 음역 도구 일뿐입니다. 할 수 있는 일은 번역/삭제/압착뿐입니다.모두공백 문자. 단순히 번역/제거/압착만 할 수는 없습니다.일부공백 문자.

답변3

GNU sed를 사용하세요. 하나 이상의 공백과 큰따옴표를 검색하세요. 큰따옴표로 바꾸세요.

sed -i -e 's/ \+"/"/' file

아니면 다음과 같이 선택은 귀하의 것입니다.

sed -i -e 's/[[:space:]]\+"/"/' file

관련 정보