변수에서 모든 공백, 탭, 줄 바꿈 등을 제거 하시겠습니까?


25

이것은 내가 얻는 오류이며 값이 2 인 변수로 인해 실패하고 있습니다 (을 사용하여 얻습니다 select * from tabel). 해당 변수에 공백이 생겼습니다.

+ 0 != 
         2
./setjobs[19]: 0:  not found.

해당 변수에서 모든 공백이나 줄 바꿈을 어떻게 제거합니까? 캔 tr, sed또는 어떤 도움?

이것이 내가하고있는 일 :

set_jobs_count=$(echo  "set heading off;
      select count(*) from oppar_db
      where ( oppar_db_job_name, oppar_db_job_rec ) in ($var) ;" | \
  sqlplus -s ${OP_ORA_USER}/${OP_ORA_PASS}@$OPERATIONAL_DB_NAME)

이것은 제안대로 작동합니다.

| sed 's/[[:space:]]//g'

그러나 나는 여전히 다음과 같은 가치를 얻습니다.

  set_jobs_count=
  2

1
select 문에서 문자열을 int로 캐스팅 할 수 있습니다. 이를 수행하는 방법은 데이터베이스, Sybase, Oracle, MySQL 등에 따라 다릅니다.
bsd

1
그것을 내가 어떻게 어떻게, 내가 오라클 9i의이
munish

1
sed를 사용하여 | sed 's/[[:space:]]//g'공백을 축소합니다
bsd

덕분에 어느 정도까지 작동하지만 여전히 변수의 값처럼 온다set_jobs_count= 2
munish

쉘에 따라 외부 도구없이 수행 할 수 있습니다. 참조 stackoverflow.com/a/3352015/587717
EDD 철강

답변:


38

tr에서 tr -d '\040\011\012\015'와 같이을 사용 하면 공백, 탭, 캐리지 리턴 및 줄 바꾸기가 제거됩니다.


3
\040\011\012\015over 를 사용하면 이점이 [:space:]있습니까?
Nick

아주 오래된 UNIX 버전과 휴대 내가 UNIX 버전 선행의 그 --- 오래된 충분히 생각할 수있는 유일한 이유입니다 POSIX.1 .
Kyle Jones

1
%출력 끝에 문자 가 무엇입니까 ? 출력이 거기서 멈추었다는 것을 알려주는 일종의 리눅스 방식 인 것 같습니까?
17:10에 폐지

4

ksh, bash 또는 zsh에서 :

set_jobs_count=…
set_jobs_count=${set_jobs_count//[[:space:]]/}

모든 쉘에서 선행 및 후행 공백을 제거하고 다음과 같이 모든 중간 공백을 단일 공백으로 정규화 할 수 있습니다.

set +f
set -- $set_jobs_count
set_jobs_count=$*
set -f

set +f글 로빙 해제; 데이터에 문자가없는 것을 알고 있으면 \[?*생략 할 수 있습니다.


흥미로운 답변 +1
15 분 02 초

@BinaryZebra 글 러빙은에서 발생합니다 set -- $set_jobs_count. set_jobs_count=$*는 인용 set_jobs_count="$@"이후 $*$@동일하며 할당의 오른쪽이 큰 따옴표로 묶인 문자열과 동일한 방식으로 구문 분석되는 경우에만 동일합니다.
Gilles 'SO- 악한 중지'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.