텍스트 파일로 가득 찬 디렉토리가 있습니다. 내 목표는 모든 것의 시작과 끝에 텍스트를 추가하는 것입니다. 각 파일의 시작과 끝 부분에 있는 텍스트는 동일합니다.
웹에서 얻은 코드에 따르면 다음은 파일 시작 부분에 추가된 코드입니다.
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