리디렉션되는 특정 줄을 무시하는 방법

리디렉션되는 특정 줄을 무시하는 방법

리디렉션을 통해 입력 파일의 일부 지침을 입력하여 실행하는 프로그램이 있습니다. 내 입력 파일은 다음과 같습니다.

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.)

관련 정보