"sed"를 사용하는 문서 및 파일

"sed"를 사용하는 문서 및 파일

sed 명령의 here-doc를 사용하고 읽을 파일과 출력 파일을 제공하고 싶습니다.

나는 본 적이여기에 파일Advanced Bash Scripting Guide에 있지만 여기에 설명된 일반 매개변수 사용에 대해서는 언급하지 않습니다. 가능합니까?

저는 다음과 같은 목표를 달성하고 싶습니다.

#!/bin/bash
OUT=/tmp/outfile.txt
IN=/my_in_file.txt

sed $IN << SED_SCRIPT
    s/a/1/g
    s/test/full/g

SED_SCRIPT 
> $OUT;

어떤 도움이라도 대단히 감사하겠습니다.

답변1

sed를 사용하여 GNU sed가 표준 입력에서 스크립트를 읽도록 지시할 수 있습니다 -f -. -f이는 파일에서 스크립트를 읽는다는 의미이며, -많은 명령에서 공통적으로 사용되는 표준 입력을 의미합니다.

sed -f - "$IN" > "$OUT" << SED_SCRIPT
    s/a/1/g
    s/test/full/g
SED_SCRIPT

POSIX sed도 지원되지만 -f표준 입력 사용은 -문서화되어 있지 않습니다. 이 경우 /dev/stdinLinux 시스템에서 이것을 사용할 수 있습니다. (Solaris에도 이것이 있다는 것을 기억하는 것 같지만 지금은 확인할 수 없습니다.)

(접두사 "-")를 사용하면 <<-SED_SCRIPT닫는 SED_SCRIPT태그를 들여쓸 수 있습니다.

답변2

(사용하여) sed에서 지원되지 않는 경우stdin-f -프로세스 교체( bash, , 에서 zsh찾을 수 있음 ksh93):

sed "$IN" > "$OUT" -f <( cat << SED_SCRIPT
    s/a/1/g
    s/test/full/g
SED_SCRIPT)

닫는 대괄호는 )닫는 구분 기호( SEC_SCRIPT) 또는 개행 문자 바로 뒤에 와야 합니다. 프로세스 대체의 경우 echo여기에 있는 문서를 대신 사용할 수도 있습니다.

sed "$IN" > "$OUT" -f <( echo \
"    s/a/1/g
    s/test/full/g" )

답변3

다음과 같이 여러 표현식을 사용하는 것은 어떨까요 -e?

#!/bin/bash
OUT=/tmp/outfile.txt
IN=/my_in_file.txt

sed 
  -e "s/a/1/g" \
  -e "s/test/full/g" \
  $IN > $OUT

더 작은 인라인 sed 스크립트의 경우 더 읽기 쉽습니다. 그런데 sed의 내부 편집을 사용할 수도 있습니다.

sed -i.org
  -e "s/a/1/g" \
  -e "s/test/full/g" \
  $IN

이렇게 하면 원본 파일이 입력 파일 아래에 저장 ${IN}.org되고 변경 사항이 입력 파일에 적용됩니다.

답변4

어쩌면 더 나은 접근 방식이 있을 수 있습니다.

OUT=/dev/stdout

IN=my_in_file.txt
sed -s 's/in/out/' < $IN > $OUT
  -or-
sed -s 's/in/out/' > $OUT < $IN

IN=my_in_text
sed -s 's/in/out/' <<< $IN > $OUT
  -or-
sed -s 's/in/out/' > $OUT <<< $IN

:)

관련 정보