2015-02-03 1 views
0

GNU/gfortran 컴파일러 용 소프트웨어 CAMx (이 오픈 소스는 상용 컴파일러에서만 지원됩니다)을 적용하려고합니다.awk : 포트란 코드의 "c"를 "!"로 바꾸십시오.

Makefile을 확장 한 후에 첫 번째 열의 모든 "c"및 "C"문자를 "!" 많은 * .inc 및 * .f 자유 형식의 Fortran 파일의. 자입니다.

당신은 나에게 모든 소스 파일을 처리 할 일부 awk 스크립트 (LS 통해 / .F 나열을, LS / .inc)을 조언하고 싶었다 "C/C"를 만들어 주 시겠어요 - "를!"> 그들 안의 첫 번째 칼럼 교체? 그것은 SED와 쉽게

너의 것, 미로

+0

후 일부 샘플 입력 및 예상 출력하지만이 문제의 언어에 대한 통역을 작성하지 않고 일반적으로 가능하지 않다 . –

+0

@EdMorton 이것은 고정 형식 FORTRAN에 관한 것 같습니다. 첫 번째 열의'c'는 주석을 주석으로 표시합니다. OP에는 FORTRAN 구현이 있으며 주석에는'! '가 대신 표시됩니다. – Wintermute

+0

@Wintermute 당신은 문자열을 확장 할 수 없기 때문에 문자열은 그 안의'c'를 가질 수 있습니다. –

답변

2

: 디렉토리의 모든 .f에 대한 다음

sed -i.bak 's/^[Cc]/!/' filename 

.inl 파일 :

find directory -type f \(-name \*.f -or -name \*.inl \) -exec sed -i.bak 's/^[Cc]/!/' '{}' \; -exec rm '{}.bak' \; 

directory가 가지고있는 디렉토리로 대체합니다 소스 코드가있는 곳. 하위 디렉토리도 처리합니다. 그가 원하지 않는 경우뿐만 아니라 -maxdepth 1을 전달하거나 대신

for file in *.f *.inl; do 
    sed -i.bak 's/^[Cc]/!/' "$file" && rm "$file".bak 
done 

를 사용합니다.

+0

왜'-i.bak'를 사용하지만 .bak 파일을 즉시 삭제합니까? '-exec ... \ +'는 sed/rm 호출 횟수를 줄입니다. –

+1

@glennjackman 두 번째'-exec'는'sed'가 성공했을 때에 만 실행됩니다. 오류가 발생해도 백업은 계속됩니다. 또한 BSD sed는 이런 식으로 불평하지 않을 것입니다. – Wintermute

1

sed을 선택합니다. 당신이 하위 디렉토리로 하강 할 경우

sed -i 's/^[cC]/!/' *.f *.inc 

, 당신은 떠들썩한 파티와 함께이 작업을 수행 할 수 있습니다

shopt -s globstar nullglob 
sed -i 's/^[cC]/!/' **/*.{f,inc}