Bash에서 여러 텍스트 파일의 시작과 끝에 텍스트를 추가하는 방법은 무엇입니까?

Bash에서 여러 텍스트 파일의 시작과 끝에 텍스트를 추가하는 방법은 무엇입니까?

텍스트 파일로 가득 찬 디렉토리가 있습니다. 내 목표는 모든 것의 시작과 끝에 텍스트를 추가하는 것입니다. 각 파일의 시작과 끝 부분에 있는 텍스트는 동일합니다.

웹에서 얻은 코드에 따르면 다음은 파일 시작 부분에 추가된 코드입니다.

echo -e 'var language = {\n$(cat $BASEDIR/Translations/Javascript/*.txt)' > $BASEDIR/Translations/Javascript/*.txt

파일 끝에 추가되는 코드입니다. 목표는 };각 파일의 끝에 텍스트를 추가하는 것입니다.

echo "};" >> $BASEDIR/Translations/Javascript/*.txt

내가 인용한 예는 단일 파일에서 작동합니다. 제 생각엔 와일드카드를 사용해 봐야 할 것 같아요 *.txt.

다른 실수를 저질렀을 수도 있습니다. 어쨌든 여러 파일의 시작과 끝에 텍스트를 추가하려면 어떻게 해야 합니까?

답변1

파일에 텍스트를 추가하려면 다음을 사용할 수 있습니다(GNU를 통해 구현됨 sed).

sed -i '1i some string' file

텍스트 첨부는 이렇게 간단합니다

echo 'Some other string' >> file

마지막으로 해야 할 일은 편집하려는 모든 파일을 반복하는 루프에 이것을 넣는 것입니다.

for file in *.txt; do
  sed -i '1i Some string' "$file" &&
  echo 'Some other string' >> "$file"
done

답변2

GNU sed를 사용할 수 있습니다

sed앞서 언급한 것처럼 i및 명령을 사용하여 각각 파일에서 일치하는 줄 앞과 뒤에 텍스트 줄을 삽입 할 수 있습니다 a. 표시되지 않은 것은 한 줄의 코드로 이 작업을 수행할 수 있다는 것입니다.여러 파일즉시.

1i다음은 첫 번째 행 앞과 마지막 행 뒤에 행을 삽입합니다 $a. glob 과 일치하는 모든 파일에 대해 삽입이 수행됩니다 *.txt.

sed -i -e '1ivar language = {' -e '$a};' -- *.txt

i줄 번호 뿐만 아니라 a주어진 패턴과 일치하는 모든 줄에 적용 됩니다 . 줄에 다음이 포함될 때마다 주석이 삽입됩니다 var y = 2;.

sed -i -- '/var y = 2;/i//initialize variable y' *.js

답변3

전체 POSIX 호환 명령, 사용ex:

for f in *.txt; do printf '%s\n' 0a 'var language = {' . '$a' '};' . x | ex "$f"; done

printf명령의 해당 부분을 별도로 실행 하면 해당 명령이 전달된 정확한 편집 명령을 볼 수 있습니다 ex.

0a
var language = {
.
$a
};
.
x

0a"0행 뒤에 텍스트 추가"(즉, 1행 앞에)를 의미합니다. 다음 줄은 0번 줄 뒤에 "추가"되는 리터럴 텍스트입니다. .줄 자체의 마침표( )는 추가할 텍스트를 끝냅니다.

$a파일의 마지막 줄 뒤에 텍스트를 추가함을 나타냅니다.

x변경 사항을 저장하고 종료함을 나타냅니다.

답변4

또한 다음과 같은 권리가 있습니다(결과는 .out파일에 있음).

find . -name '*.txt' -exec sh -c '(echo HEAD;cat {};echo FOOT) > {}.out' \;

또 다른 더 자세한 변형 - 소스 파일이 결과로 대체되었습니다.

find . -name '*.txt' -exec sh -c '(echo HEAD;cat {};echo FOOT) > {}.tmp && mv {}.tmp {}' \; -print

관련 정보