나는 다음을 가지고 있습니다
"/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'
그건:
"
각 앞에 추가 항목을 삽입하세요.<blanks>"
<X>"<blanks>"<Y>"<blanks>"
모두 다음으로 변경<X>"<blanks>"<Y>""
"
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