sed "잘못된 명령 코드 W"

sed "잘못된 명령 코드 W"

sed루프에서 .vtt 텍스트 파일 집합의 요청/헤더에 텍스트를 추가하려고 합니다. 텍스트를 대체하지 않고 텍스트만 추가합니다.

텍스트에 줄 바꿈을 추가해야 합니다.

텍스트는 다음과 같아야 합니다.

WEBVTT
Kind: captions
Language: eng
File Creation Date: 2023-08

이것이 내가 시도하는 것입니다:

for file in *.vtt ; do 
sed -i '' 'WEBVTT/nKind: captions/nLanguage: eng/nFile Creation Date: 2023-08' "$file"
done

나에게 오류가 발생합니다 : sed: 1: 'WEBVTT/nKind: captions/ ...': invalid command code W

이유는 모르겠습니다. 큰따옴표/작은따옴표를 전환해 보았지만 작동하지 않았습니다.

답변1

다음 명령을 사용하는 것이 더 쉽고 이식성이 뛰어납니다 perl.

perl -0777 -ni -e 'print qq(WEBVTT
Kind: captions
Language: eng
File Creation Date: 2023-08
$_)' -- *.vtt

sed스크립트는 대체, 분기 또는 삽입 과 같은 단일 문자인 [<address>[,<address>]] <command>일련 의 문자로 구성됩니다.<command>sbi

여기서 스크립트의 공백이 아닌 첫 번째 문자는 입니다 W. sed주문하는 사람이 많지 않아요 W. 당신의 것은 그렇지 않지만, GNU와 같이 하는 것에서는 sed당신이 원하는 것을 하지 않습니다.

여기에서는 파일 시작 부분에 일부 텍스트를 삽입하려는 것 같습니다. 따라서 주소 i sed로 명령을 사용할 수 있습니다 1. 즉, 첫 번째 줄에서만 실행됩니다(그러나 파일이 비어 있으면(줄 없음) 전혀 실행되지 않습니다 1).

sed -i '' -e '1 i\
Kind: captions\
Language: eng\
File Creation Date: 2023-08' -- *.vtt

sed이것은 당신이 FreeBSD 구현을 사용하고 있는 것으로 가정합니다.

GNU 구현의 경우 sed다음과 같아야 합니다.

sed -si -e '1 i\
Kind: captions\
Language: eng\
File Creation Date: 2023-08' -- *.vtt

여기에서는 백업 접미사(여기서는 비어 있음)를 -i옵션 에 추가해야 하며 -s각 파일 사이에서 줄 번호를 재설정해야 합니다.

GNU를 사용하여 sed파일에 텍스트를 삽입하려면 header다음을 수행할 수 있습니다.

sed -si -e '0 r header' -- *.vtt

(주소 0는 GNU 확장이며 주소 범위 및 명령에서만 유효합니다 . 여전히 빈 파일 앞에 추가되지 r않습니다 .)header

답변2

문서에 추가하고 싶은 내용은 언제든지 여기에 작성할 수 있습니다.

#!/usr/bin/env bash

tmp=$(mktemp) || exit
trap 'rm -f -- "$tmp"; exit' EXIT

shopt -s nullglob
for file in *.vtt ; do
    cat -- - "$file" <<- 'EOF' > "$tmp" &&
        WEBVTT
        Kind: captions
        Language: eng
        File Creation Date: 2023-08
    EOF
    cat -- "$tmp" > "$file"
done

sed -i임시 파일은 뒤에서 사용되며 위 내용을 통해 명확해졌습니다. 문서의 선행 공백은 다음과 같아야 합니다., 다른 유형의 공백이 아닌.

답변3

awk를 사용하는 것이 더 쉬울 수도 있습니다. 앞에 추가된 텍스트 줄을 파일(addit.txt라고 부름)에 넣고 다음 루프를 사용합니다.

$ for file in *.vtt ; do awk -i inplace 'NR==1{system ("cat addit.txt")}1' "$file"; done

이렇게 하면 각 .vtt 파일 상단에 짧은 텍스트가 추가됩니다.

관련 정보