따라서 데이터 파일에서 다음 두 명령을 연속해서 수동으로 사용합니다. 즉, 첫 번째 명령이 파일 업데이트를 마친 후 두 번째 명령을 트리거합니다.
sed -i 's/""""/" " /g' EXPERIMENT-20210729010003.FILE
sed -i 's/"""/" " /g' EXPERIMENT-20210729010003.FILE
이것을 .sh 스크립트에 작성하고 파일 이름을 sh 호출에 매개변수로 전달하려면 어떻게 해야 합니까?
EXPERIMENT-*.FILE이 내 유닉스 서버에 매일 나타납니다. 특정 시점에 이름에 고유한 날짜/시간 값이 추가된 실험 파일은 하나만 있을 수 있습니다.
감사해요!
답변1
sed
두 개의 개별 명령을 하나로 결합할 수 있습니다 .
sed -i -e 's/""""/" " /g' -e 's/"""/" " /g' file
심지어,
sed -i 's/"\{3,4\}/" " /g' file
(하지만 """"
교체 중이기 때문에앞으로 """
;역순으로 대체를 수행하면 마지막 명령은 동일하지 않습니다).
이것을 쉘 스크립트로 바꿀 수 있습니다.
#!/bin/sh
sed -i -e 's/""""/" " /g' -e 's/"""/" " /g' -- "$@"
...또는 쉘 함수( ~.bashrc
예: 파일)로,
call_sed () {
sed -i -e 's/""""/" " /g' -e 's/"""/" " /g' -- "$@"
}
명령은 --
명령줄 옵션 처리를 중지하고 대시로 시작하는 파일 이름에 스크립트나 함수를 사용할 수 있도록 합니다. "$@"
주어진 스크립트나 함수로 확장 될 파일 이름 목록으로, 각각 개별적으로 인용됩니다.
다음과 같은 스크립트나 함수를 사용할 수 있습니다.
$ call_sed EXPERIMENT-*.FILE
이와 같은 단일 명령을 사용하면 sed
별칭으로 만들 수도 있지만 인용에 주의해야 합니다. 쉘 함수를 사용하는 것이 좋습니다.
alias call_sed='sed -i -e "s/\"\"\"\"/\" \" /g" -e "s/\"\"\"/\" \" /g" --'
-i
이 옵션(항상 사용하고 싶지 않을 수도 있음)을 스크립트에 옵션으로 만들려면 다음을 수행하세요.
#!/bin/sh
unset in_place
if [ "$1" = "-i" ]; then
in_place=true
shift
fi
sed ${in_place:+-i} -e 's/""""/" " /g' -e 's/"""/" " /g' -- "$@"
비어 있지 않으면 ${in_place:+-i}
다음으로 확장됩니다. 스크립트에 제공된 첫 번째 인수가 이면 이 변수는 null이 아닙니다.-i
$in_place
-i
쉘 함수가 옵션을 사용하도록 코드의 쉘 함수 변형에도 동일한 수정이 이루어질 수 있습니다 -i
.
답변2
기본적으로 당신이 찾고 있는 것은 다음과 같습니다:
#!/bin/bash
sed -i 's/""""/" " /g' $1
sed -i 's/"""/" " /g' $1
exit 0
스크립트 이름을 이라고 가정해 보겠습니다 myscript.sh
. 다음과 같이 사용할 수 있습니다.
./myscript.sh filename.txt
$1
은 스크립트에 전달된 첫 번째 매개변수 입니다 (이 경우 ) filename.txt
.
모든 bash/shell 스크립트는 실행해야 하는 명령 모음일 뿐입니다.할 수 있는수동으로 실행하는 대신 이러한 명령을 모두 자동화하세요.