리디렉션을 통해 입력 파일의 일부 지침을 입력하여 실행하는 프로그램이 있습니다. 내 입력 파일은 다음과 같습니다.
alpha
5
2
run
7
quit
이제 다음과 같이 실행합니다.
myprogram < input_file
그러나 때로는 명확하게 하기 위해 입력 파일에 몇 가지 설명을 추가해야 할 때도 있습니다.
# The name of value
alpha
# The acceleration
5
# The distance
2
run
7
quit
불행하게도 지금은 프로그램이 무시하지 않기 때문에 프로그램으로 리디렉션할 수 없습니다.#
로 리디렉션하기 전에 이러한 주석 줄을 어떻게 무시할 수 있습니까 myprgram
?
답변1
grep
다음을 사용하여 "#"으로 시작하는 줄을 필터링 할 수 있습니다 .
grep -v '^#' input_file | myprogram
전달된 문자열은 grep
정규식입니다. 줄의 시작 부분( )과 일치하며 ^
그 뒤에 #
. -v
이 패턴과 일치하지 않는 행이 표시되도록 논리를 반대로 바꿉니다.
일반적으로 행 내의 데이터를 수정하려면 grep
단순히 전체 행을 표시/삭제하도록 선택합니다. sed
물론 이 sed
솔루션도 효과가 있습니다.
답변2
프로그램에 주석을 공급하기 전에 sed를 사용하여 주석이 있는 행을 필터링하십시오. 다음 형식 중 하나를 선택할 수 있습니다(그러나 모든 쉘이 두 번째 형식인 프로세스 대체를 지원하는 것은 아닙니다).
sed '/^#/d' input_file | myprogram
myprogram < <(sed '/^#/d' input_file)
/^#/
는 으로 시작하는 모든 줄과 일치하는 정규식이며 #
출력 d
에서 해당 줄을 제거하는 명령입니다. (걱정하지 마세요. input_file
수정되지 않습니다 sed
.)