텍스트 파일에서 특정 줄을 명령으로 실행하려면 어떻게해야합니까?


11

때로는 쉘 스크립트에있는 단일 명령을 실행해야합니다.

이미 sed -n 'line_num p'그 줄을 인쇄 할 수 있다는 것을 알고 있습니다. 그러나 특정 줄을 명령으로 인쇄 한 exec를 어떻게 실행할 수 있습니까?

답변:


9

이 사람을보십시오 =) :

sed -n 'line_num p' | bash

또는

"$(sed -n 'line_num p')"

@ mikeserv 나는 내 교육에 대한 그 진술의 맥락을 알고 싶다.
Bratchley

line_num와 사이에 공백을 넣을 필요가 없습니다. p예를 들어 line_num123이면 sed -n 123p | bash. 그리고 sh충분 하다면 sh대신을 사용하십시오 bash.
janos

그래서, sed -n 'line_num p' | sh또 다른 해결책이 될 수 있을까? 이것은 더 호환성이 있습니까?
Zen

1
@Zen-스크립트의 대상이되는 쉘에 따라 다릅니다. 또한 sh실제로 쉘 이 무엇인지에 달려 있습니다. 데비안 (및 파생 된) 시스템 sh은 일반적으로 dash입니다. 스크립트가 작성 dash 되었거나 이식 가능한 구문에 의존 한다면 아마도 bash그렇습니다. 그러나 스크립트가 작성 된다면 거의 확실하지 않습니다.
mikeserv

히스토리 파일을 사용 하여이 작업을 수행 할 수 있고 history900 행을 실행하려는 경우 900 행을 실행할 수 있습니까?
codecowboy

3

이것을 대화식으로하는 경우 bash 기록에 줄을 쓸 수 있습니다.

history -s "$(sed -n 'line_num p')"

그런 다음을 눌러 Enter행을 판독 선 버퍼에 삽입하고 실행하십시오. 너무 늦기 전에 줄을 볼 수있는 기회를 제공합니다.


꽤 영리하고 아마도 좋은 가정 일 것입니다.
mikeserv

여기서 -s 옵션은 무엇을 의미합니까? 설명을 찾을 수 없습니다man history
Zen

@zen : history은 빌트인이므로 문서화되어 있습니다 help history(또는 man bash이지만 많은 것을 읽습니다). 위의 내용을 인용하면 history -s"ARG를 내역 목록에 단일 항목으로 추가"
rici

2

넌 할 수있어...

{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"

그것은 $NUM쉘 변수의 스크립트에서 줄을 가져온 $line다음 현재 쉘의 명령으로 평가합니다.

이를 수행하는 다른 방법은 다음과 같습니다.

 </path/to/script sed "${NUM}q;d" >/tmp/"$$"
 . /tmp/"$$" ; rm /tmp/"$$"

1
'eval'은 'evil'의 일반적인 맞춤법 오류입니다. eval이 답이라면 반드시 잘못된 질문을하고있는 것입니다. mywiki.wooledge.org/BashFAQ/048
Gilles Quenot

1
예. 모두가 사랑 eval합니다.
mikeserv

gnu sede뭔가 같은 플래그를 sed "${NUM}"'!d;s/^//e;q'또한 일 것이다
don_crissti

2

vim (Linux의 경우 vi)을 사용하여 스크립트를 편집하고 있습니까? vi에서 맵핑을 추가하십시오.

:nmap <F4> Y:!<C-R>"<C-H><CR>

그리고 vi에서 F4 키를 누르면 재미있는 줄에 있습니다.


-2

bash에서 다음 명령을 실행할 수 있습니다.

for line in $(cat file.txt); do command $line; done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.