여러 파일을 편집하는 Bash 스크립트
-
06-07-2019 - |
문제
많은 데이터를 처리하고 데이터베이스에 삽입할 준비를 하기 위해 우리는 여러 개의 쉘 스크립트를 생성합니다.각각에는 데이터가 이동하는 각 테이블마다 하나씩 약 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