2010-06-09 2 views
26

정말 간단한 질문입니다. 쉘에서 echo와 cat을 어떻게 조합합니까? 파일의 내용을 다른 문자열 앞에 붙여 넣으려고합니다.Unix에서 에코와 고양이를 결합하기

경우는/tmp 디렉토리/파일은 다음과 같습니다

this is a test 

내가이 실행하려면 : 그래서를

echo "PREPENDED STRING" 
cat /tmp/file | sed 's/test/test2/g' > /tmp/result 

를/tmp를/결과는 다음과 같습니다

PREPENDED STRINGthis is a test2 

감사.

답변

30

이 작동합니다 :

echo "PREPENDED STRING" | cat - /tmp/file | sed 's/test/test2/g' > /tmp/result 
+3

나는이 단순함을 좋아하지만, 완성을 위해 에코에서 -n 플래그를 다른 대답으로 언급해야한다. – Dan

+6

'cat' 인수에서'-'에 대해 궁금한 사람은 맨 페이지에서 :'FILE이 없거나 FILE 일 때 - 표준 입력을 읽습니다. ' – SooDesuNe

+2

'-n' 플래그가 작동하지 않습니다 'echo '의 모든 변종들입니다. 그러나 그것은 대부분 역사적 기록입니다. – reinierpost

11

시도 : 출력이 >/tmp/result 리디렉션에 대한 단일 스트림처럼 보이도록

(printf "%s" "PREPENDED STRING"; sed 's/test/test2/g' /tmp/file) >/tmp/result 

괄호는 서브 쉘 내부 명령 (들)을 실행합니다.

2

또는 단지는 또한

sed -e 's/test/test2/g 
s/^/PREPEND STRING/' /tmp/file > /tmp/result 
+0

"one-liner-ness"는 2'-e'를 사용합니다 :'sed -e '/ test/test2/g'-e 's/^/PREPEND STRING /'... ' –

+0

물론 이것은 물론 문자열을 입력 파일의 모든 행 앞에 추가합니다. –

+0

원하는 것일 수 있습니다. 그렇지 않다면'sed '1s/^/PREPENDED STRING /; s/test/test2/g '/ tmp/file>/tmp/result' –

0

또는 sed를 사용

{ echo "PREPENDED STRING" ; cat /tmp/file | sed 's/test/test2/g' } > /tmp/result 
+0

'cat'의 쓸모없는 사용. 이것은 또한 작동합니다 :'{echo "PREPENDED STRING"; sed의/test/test2/g '; } < /tmp/file >/tmp/result' – reinierpost

0

또 다른 옵션 :

gawk 'BEGIN {printf("%s","PREPEND STRING")} {gsub(/test/, "&2")} 1' in > out 
0

: 모든 줄을해야에만 표시 한 번이 아니라 추가되는 말머리 문자열을 가정 전자 메일을 보내려는 경우 CRLF 줄 끝을 다음과 같이 사용하십시오 :

echo -e 'To: [email protected]\r' | cat - body-of-message \ 
| sed 's/test/test2/g' | sendmail -t 

을 주목 -e -flag 및 문자열 내부 R 그 \ .

설정 대상 : 루프 방식으로이 방법은 세계에서 가장 간단한 대량 메일러를 제공합니다.