2017-02-02 1 views
-1

새로운 라인, 탭과 연속적인 공백을 대체 할 때 제거하기 내가caracter 'A'는 내가 공간 아래

cat program.c | tr '\n' ' ' | tr '\t' ' ' | tr -s [:space:] ' ' >unreadable.c 

출력은

Hi w ssup. How re you doing bro Its nice to see you g in bro . 

그러나 타이핑 명령은 문제는 문자 'a'가 발생해서는 안되는 파일에서 제거됩니다.

누구나 도움이 될 수 있습니다. 감사

답변

5

[:space:] 당신, 당신은, 패턴이 일치 작업 디렉토리에 a라는 이름의 파일이 나타납니다 그래서 (단일 ', s, p, a, c, 또는 e 일치) 유효한 글로브 패턴입니다 셸이 경로 이름 확장을 수행 한 후에 이 실제로으로 실행되고 tr -s a ' '이 실행됩니다. 껍질이 그것을 발산하는 것을 막기 위해 패턴을 인용하십시오.

... | tr -s '[:space:]' ' ' > unreadable.c 

이 (일치하는 파일이 없었다 경우, 기본 동작은 그대로 패턴을 치료하는 것을 참고하고, 명령이 예상대로 작동합니다. 그러나이 일치하지 않는 치료에 설정할 수있는 쉘 옵션이 있습니다 이 좋습니다 그래서 오류와 같은 패턴, 항상).이 명령에 그대로 전달됩니다 보장하는 인수를 인용 만에 하나의 호출을 필요로하므로


[:space:]는 이미 줄 바꿈과 탭이 포함되어 있습니다 tr :

,210
tr '[:space:]' ' ' <program.c> unreadable.c 
0

이 같이 나오지도 사용할 수 있습니다

cat program.c | sed -r "s/\n|\t|\s+/ /g" > unreadable.c