sed를 사용하여 구분 기호 앞의 공백을 제거하십시오.

sed를 사용하여 구분 기호 앞의 공백을 제거하십시오.

LibreOffice calc에 입력하려는 다음 형식의 데이터가 있습니다.

data | num   | num | num     | num

어떤 이유로 Libreoffice는 기본적으로 문자열 "3214"를 숫자(후행 공백)로 간주하지 않습니다.

공간과 Kleene 별 작업을 나타내는 (\s)*|위치를 바꾸고 싶습니다 . 그리고 한 줄에 여러 위치에서 이 작업을 수행합니다(모든 일치).|\s*

나는 시도했다:

sed  -i 's/(\s)*|/|/' DataStats0914.txt

그러나 아무 소용이 없습니다.

답변1

왜 인용하는 걸까요? 참조를 원할 경우 대신 \(및를 사용하세요 \).

g또한 이 옵션은 패턴이 여러 번 나타나므로 주의하세요.

sed -i 's/\s*|/|/g' DataStats0914.txt

테스트 사례:

echo 'data | num | num | num | num' | sed 's/\s*|/|/g'

얻다:

data| num| num| num| num

답변2

여러 가지가 있습니다정규식문법. (\s*)일련의 공백과 일치진주그리고 정규 표현식을 모방하는 다른 많은 현대 프로그램도 있습니다. Sed는 이전 버전을 사용합니다.기본 정규식대괄호는 그 자체를 나타내며 \(…\)그룹화에 사용됩니다. GNU sed(Linux 버전)에는 다음을 -r사용하는 옵션이 있습니다.확장 정규식(Perl 정규 표현식은 더욱 확장되었습니다). 또한 |BRE에서는 자체를 나타내지만 ERE에서는 앞에 백슬래시가 와야 합니다.

s/[ \t]\+|/|/|GNU sed를 사용하여 공백 다음에 a를 바꿉니다. POSIX 호환 sed 명령을 원할 경우 s/[ ][ ]*|/|/괄호 쌍당 하나의 공백과 하나의 탭을 사용하십시오. 왜냐하면 \t\+는 GNU 확장이기 때문입니다. 또한 이 s명령은 각 행에서 한 번만 교체합니다. g모든 발생을 바꾸려면 접미사를 추가합니다.

sed  -i 's/[ \t]\+|/|/g' DataStats0914.txt

답변3

sed는 공백을 제거합니다.

sed -i 's/ *|/|/g' file

답변4

테스트되지 않은 Pythonish 세 번째 줄:

python -c 'import sys
for l in sys.readlines():
    print("| ").join([f.strip() for f in l.strip().split("|")])'

관련 정보