backup
파일 확장자라는 디렉토리 가 있습니다 *.sql
. 내가 원하는 것은 디렉토리의 모든 SQL 파일 앞에 한 줄을 추가하는 것입니다 backup
.
그렇게 했지만 echo 'use my_db;' >> backup/*.sql
성공하지 못했습니다.
다음을 시도했지만 다음에 무엇을 해야할지 모르겠습니다.
ls backup/*.sql | xargs echo "use my_db;"
해당 줄을 앞에 추가하는 솔루션이 있습니까?
답변1
GNU 사용 sed
:
for sql in backup/*.sql; do
sed -i '1i\use my_db;' "$sql"
done
표준 sed
:
for sql in backup/*.sql; do
sed '1i\
use my_db;
' "$sql" >"$sql.bak" && mv "$sql.bak" "$sql"
done
.sql
그러면 그 안에 있는 모든 파일을 바로 편집할 수 있습니다 backup
. 편집 명령은 각 파일의 첫 번째 줄 앞에 한 줄을 삽입합니다.
이는 패턴이 backup/*.sql
편집하려는 파일과만 일치한다고 가정합니다.
사용 echo
및 cat
:
for sql in backup/*.sql; do
{ echo 'use my_db;'; cat "$sql"; } >"$sql.tmp" && mv "$sql.tmp" "$sql"
done
이 루프에서는 먼저 파일에 추가할 줄을 출력한 다음 파일의 내용을 출력합니다. 이는 임시 파일로 이동한 다음 이름이 변경됩니다.
주문하다
echo 'use my_db;' >> backup/*.sql
다음과 같이 확장됩니다.
echo 'use my_db;' >> backup/file1.sql backup/file2.sql backup/file3.sql
이는 다음과 같습니다.
echo 'use my_db;' backup/file2.sql backup/file3.sql >> backup/file1.sql
그러면 주어진 문자열이 backup/file1.sql
.
두 번째 명령은 파일을 수정하지 않습니다.
답변2
해결책
sed -i '1 i\use my_db' backup/*.sql
설명하다
sed -i
파일의 변경 사항을 유지하고 쓰지 마십시오 stdout
.
1
- sed
첫 번째 줄에 있을 때.
i
- 다음 줄을 삽입하세요.
backup/*.sql
실행할 파일입니다 sed
.
답변3
폴더의 각 파일을 반복할 수 있습니다.
for item in $(ls backup/ | grep "*.sql")
do
echo "use my_db;" >> $item
done