파일의 문자열을 다른 파일로 바꾸는 방법은 무엇입니까?

파일의 문자열을 다른 파일로 바꾸는 방법은 무엇입니까?

문자열이 포함된 파일이 여러 개 있습니다. 문자열을 다른 파일의 전체 내용(여러 줄 가능)으로 바꿔야 합니다. 어떻게 해야 하나요?

내가 필요한 것은 문자열 "filename"이 아닌 실제 파일이 sed -i 's/string/filename/' *어디에 있는지와 같은 것입니다.filename

추가 정보: 파일에는 /또는 \또는 |등의 특수 문자가 포함될 수 있습니다.[]

답변1

bash는 이에 대해 훌륭하게 작동합니다.

$ cat replace
foo/bar\baz
the second line

$ cat file
the replacement string goes >>here<<

$ repl=$(<replace)

$ str="here"

$ while IFS= read -r line; do
    echo "${line//$str/$repl}"
done < file
the replacement string goes >>foo/bar\baz
the second line<<

awk는 작동합니다. 단지 백슬래시 이스케이프를 해석한다는 것뿐입니다( \b내 예에서는).

$ awk -v string="here" -v replacement="$(<replace)" '
    {gsub(string, replacement); print}
' file
the replacement string goes >>foo/baaz
the second line<<

답변2

활용도가 낮은 sed 명령이 필요합니다아르 자형파일을 읽습니다.

sed -i '/string/{r filename
                 d}'

나는 당신이 전체 라인을 교체하고 싶다고 가정하고, 그렇지 않으면 d를 적절한 것으로 교체합니다.

답변3

나는 이것을 작동시켰다:

$ foo='baz'
$ echo "foobarbaz" | sed "s/foo/${foo}/"
bazbarbaz

한 단계 더 나아가면 첫 번째 줄은 다음과 같습니다.

$ foo=`cat filename`

물론 이는 바꾸려는 줄에 도달하기 전에 파일 이름을 알고 있다고 가정합니다. 파일 이름을 모른다면 줄을 읽고 파일 이름을 가져온 다음 읽기 및 바꾸기를 수행해야 합니다.

관련 정보