문제

많은 데이터를 처리하고 데이터베이스에 삽입할 준비를 하기 위해 우리는 여러 개의 쉘 스크립트를 생성합니다.각각에는 데이터가 이동하는 각 테이블마다 하나씩 약 15개의 라인이 있습니다.최근 가져오기 일괄 처리 중 일부 가져오기 파일이 특정 테이블로 이동하는 데 실패했습니다.따라서 처음 7줄을 주석 처리한 다음 파일을 다시 실행해야 하는 쉘 스크립트(약 600개)가 있습니다.이 폴더에는 약 6000개의 쉘 스크립트가 있으며 특정 파일에 대한 어떤 내용도 편집이 필요한지 알 수 없습니다.데이터베이스 출력에서 ​​가져온 파일 목록이 있습니다.

그렇다면 이 파일 이름 목록을 가져와 각 파일 이름에 대해 처음 7줄을 주석 처리하고 스크립트를 실행하려면 bash 스크립트(또는 더 잘 작동하는 다른 스크립트)를 어떻게 작성해야 할까요?

편집하다:

#!/usr/bin/env sh

cmd1
cmd2
cmd3
cmd4
cmd5
cmd6
cmd7
cmd8

얼마나 읽기 쉬운지 잘 모르겠습니다.기본적으로 처음 7줄(첫 번째 줄은 제외)의 시작 부분에 #을 추가해야 합니다.메모:각 줄을 더 짧게 만들고 VIM에서 복사하는 부분이 부분적으로 잘리도록 파일이 편집되었습니다.그러나 각 파일의 주요 부분에는 echo로 시작하는 줄과 sqlldr로 시작하는 줄이 있습니다.

도움이 되었습니까?

해결책

sed를 사용하면 변경할 파일의 줄 번호 범위를 지정할 수 있습니다.

#!/bin/bash

while read line
do
    # add a comment to beginning of lines 1 - 7 and rename the script
    sed '3,9 s/^/#/' $line > $line.new
    exec $line.new
done < "filelist.txt"

모든 스크립트에서 실행하기 전에 이를 테스트해 볼 수도 있습니다.

편집하다:주석을 반영하여 줄 번호를 변경했습니다.

다른 팁

대략적으로 말하면:

#!/bin/sh
for file in "$@"
do
    out=/tmp/$file.$$
    sed '2,8s/^/#/' < $file > $out
    $SHELL $out
    rm -f $out
done

경쟁 조건 등을 확인하는 데 신경 쓰지 않는다고 가정합니다.

ex는 당신이 하고 싶은 일을 위해 만들어진 것 같아요.

예를 들어, 여기 문서를 사용하여 하나의 파일을 편집하려면 다음을 수행하십시오.

#!/bin/sh

ex test.txt << END
1,12s/^/#/
wq
END

그러면 "test.txt"의 처음 12줄이 주석 처리됩니다.귀하의 예를 들어 시도해 볼 수 있습니다 "$FILE" 또는 이와 유사합니다(따옴표 포함!).

그런 다음 일반적인 방법으로 실행하십시오. ./"$FILE"

편집하다: $SHELL "$FILE" 아마도 위의 주석 작성자 중 한 명으로부터 실행하는 더 나은 접근 방식일 것입니다.

궁극적으로 Linux 명령 sed를 사용하려고 할 것입니다.스크립트에 어떤 논리를 배치해야 하는지 알 것입니다.그러나 스크립트는 궁극적으로 sed를 호출합니다. http://lowfatlinux.com/linux-sed.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top