문자열에 개행 문자가 포함된 경우에 대한 C 쉘 스크립트 조건

문자열에 개행 문자가 포함된 경우에 대한 C 쉘 스크립트 조건

문자열 일치 구문을 사용하여 이를 어떻게 표현하는지 잘 모르겠습니다 csh. csh 변수에 개행 문자가 포함되어 있는지 테스트하고 싶습니다. 나는 기본적으로 다음을 찾고 있습니다.

if ($mystr !~ <pattern for strings which contain a newline character>)

편집하다:내 특별한 경우에는 다음과 같은 문자열을 만들려고 합니다.

1234ABC

그리고 다음과 같은 문자열은 실패합니다.

1234ABC
 -------
FOOBAR

sed이는 명령 의 출력입니다 sed '1d;$d'. 그게 중요한지 확실하지 않습니다.

" -------"내가 구문 분석 중인 파일 형식의 변경을 방어하기 위한 것이 아니라 개행 문자를 감지하려고 하는 이유는 다음과 같습니다. (어쨌든 나는 개행 문자를 감지하기 위한 일반적인 솔루션을 찾고 있기 때문에 파일로 정확히 무엇을 하는지는 중요하지 않다고 생각합니다.)

답변1

if ($mystr:q =~ *'\
'*) echo yes

csh( 데비안에서 발견된 것과 같은) csh일부 구현과 버전에서 작동해야 합니다 . tcsh일부 다른 경우(Solaris 10에서 발견된 것과 같은) 다음과 같은 경우 더 나은 행운을 누릴 수 있습니다.

set nl = '\
'
if ($mystr:q =~ *$nl:q*) echo yes

csh대부분의 사람들은 이제 신뢰할 수 있는 스크립트를 작성하려는 노력을 포기했습니다 . csh금세기에 왜 사용하겠습니까 ?

이 코드는 나에게 효과적입니다(출력 no).tcsh 6.17.00 (Astron) 2009-07-10 (x86_64-unknown-linux) options wide,nls,dl,al,kan,rh,color,filec

set mystr = '1234ABC\
 -------\
FOOBAR'
if ($mystr:q !~ *'\
'*) then
  echo yes
else
  echo no
endif

그럴 경우 다음 사항에 유의하세요.

set var = `some command`

cshsome command배열 의 여러 요소에 출력의 각 단어(공백으로 구분)를 저장합니다 var.

와 함께:

set var = "`some command`"

비어 있지 않은 각 줄을 배열 요소에 저장합니다.

명령의 출력 전체를 의 변수에 저장할 없는 것처럼 보이 (t)csh므로 유일한 옵션은 다음과 같습니다.

set var = "`some command`" # note that it removes the empty lines
if ($#var == 1)...

1 엄밀히 말하면 그것은 사실이 아닙니다. 다음과 같이 할 수 있습니다.

set x = "`some command | paste -d. /dev/null -`"
set var = ""
set nl = '\
'

foreach i ($x:q)
  set i = $i:s/.//:q
  set var = $var:q$i:q$nl:q
end

(물론 모든 csh구현/버전에서 작동하지 않을 수도 있습니다)

관련 정보