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


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 sed가 e뭔가 같은 플래그를 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.