답변:
sed
주소에서 작동 할 수 있습니다 :
$ sed -i '1s/^/<added text> /' file
1s
여기 모든 대답 에서이 마법이 무엇입니까 ? 라인 어드레싱! .
<added text>
처음 10 줄 을 추가 하고 싶 습니까?
$ sed -i '1,10s/^/<added text> /' file
또는 다음을 사용할 수 있습니다 Command Grouping
.
$ { echo -n '<added text> '; cat file; } >file.new
$ mv file{.new,}
파일 시작 부분에 줄을 추가 \n
하려면 위의 최상의 솔루션에서 문자열 끝에 줄 을 추가해야합니다 .
가장 좋은 해결책은 문자열을 추가하지만 문자열을 사용하면 파일 끝에 줄을 추가하지 않습니다.
sed -i '1s/^/your text\n/' file
파일이 한 줄이면 다음을 사용할 수 있습니다.
sed 's/^/insert this /' oldfile > newfile
한 줄 이상인 경우. 다음 중 하나 :
sed '1s/^/insert this /' oldfile > newfile
sed '1,1s/^/insert this /' oldfile > newfile
다양한 라인을 수행하는 방법을 알 수 있도록 후자를 포함 시켰습니다. 이 두 가지 모두 영향을받는 줄의 시작 줄 표식을 삽입하려는 텍스트로 "대체"합니다. 당신은 또한 (당신 sed
이 충분히 현대적 이라고 가정 ) 사용할 수 있습니다 :
sed -i 'whatever command you choose' filename
바로 편집 할 수 있습니다.
당신이 사용할 수있는 cat -
printf '%s' "some text at the beginning" | cat - filename
echo
개행을 추가하는 것을 막을 수있는 이식 가능한 방법이 없기 때문에 아마도 ?
> file
명령 을 추가 하여 파일로 보내려고했는데 , 터미널에 스팸을 "some text at the beginning"
printf '%s' "some text" | cat - filename > tmpfile && mv tmpfile filename
개행 만 삽입하려면 다음을 수행하십시오.
sed '1i\\'
문제 : 파일 상단에 파일을 부모 디렉토리의 기본 이름으로 태그하십시오.
즉
/mnt/Vancouver/Programming/file1
상단의 태그 file1
와를 Programming
.
해결 방법 1- 비어 있지 않은 파일 :
bn=${PWD##*/} ## bn: basename
sed -i '1s/^/'"$bn"'\n/' <file>
1s
텍스트를 파일의 1 행에 배치합니다.
해결 방법 2- 비어 있거나 비어 있지 않은 파일 :
sed
위 의 명령은 빈 파일에서 실패합니다. 다음은 /superuser/246837/how-do-i-add-text-to-the-beginning-of-a-file-in-bash/246841#246841을 기반으로 한 솔루션입니다.
printf "${PWD##*/}\n" | cat - <file> > temp && mv -f temp <file>
있습니다 -
고양이의 명령이 필요는 (표준 입력을 읽 참조 man cat
자세한 내용). 여기에서 printf 문의 출력을 STDIN으로 가져 와서 cat 및 파일을 임시로 가져와야한다고 생각합니다 . .html .
또한 파일을 덮어 쓸 때 확인을 요청하지 않도록 명령에 추가 -f
했습니다 mv
.
디렉토리를 반복하려면 다음을 수행하십시오.
for file in *; do printf "${PWD##*/}\n" | cat - $file > temp && mv -f temp $file; done
또한 공백이있는 경로를 깰 수 있습니다. 다른 곳에 솔루션 (예 : 파일 글 로빙 또는 find . -type f ...
유형 솔루션)이 있습니다.
부록 : Re : 마지막 코멘트입니다.이 스크립트를 사용하면 경로에 공백이있는 디렉토리를 통해 재귀를 수행 할 수 있습니다.
#!/bin/bash
## /programming/4638874/how-to-loop-through-a-directory-recursively-to-delete-files-with-certain-extensi
## To allow spaces in filenames,
## at the top of the script include: IFS=$'\n'; set -f
## at the end of the script include: unset IFS; set +f
IFS=$'\n'; set -f
# ----------------------------------------------------------------------------
# SET PATHS:
IN="/mnt/Vancouver/Programming/data/claws-test/corpus test/"
# /superuser/716001/how-can-i-get-files-with-numeric-names-using-ls-command
# FILES=$(find $IN -type f -regex ".*/[0-9]*") ## recursive; numeric filenames only
FILES=$(find $IN -type f -regex ".*/[0-9 ]*") ## recursive; numeric filenames only (may include spaces)
# echo '$FILES:' ## single-quoted, (literally) prints: $FILES:
# echo "$FILES" ## double-quoted, prints path/, filename (one per line)
# ----------------------------------------------------------------------------
# MAIN LOOP:
for f in $FILES
do
# Tag top of file with basename of current dir:
printf "[top] Tag: ${PWD##*/}\n\n" | cat - $f > temp && mv -f temp $f
# Tag bottom of file with basename of current dir:
printf "\n[bottom] Tag: ${PWD##*/}\n" >> $f
done
unset IFS; set +f
파일 맨 위에 줄을 추가하려면
sed -i '1iText to add\'
매우 쉬운 방법이 있습니다.
echo "your header" > headerFile.txt
cat yourFile >> headerFile.txt
재미를 위해 여기 ed
에 빈 파일로 작업하지 않는 문제가없는 솔루션이 있습니다. 이 질문에 대한 다른 답변과 마찬가지로 쉘 스크립트에 넣을 수 있습니다.
ed Test <<EOF
a
.
0i
<added text>
.
1,+1 j
$ g/^$/d
wq
EOF
위의 스크립트는 첫 번째 줄에 삽입 할 텍스트를 추가 한 다음 첫 번째 줄과 두 번째 줄을 결합합니다. 잘못된 조인으로 오류가 발생하여 종료되는 것을 방지하기 위해 파일 끝에 빈 줄을 만들고 나중에 존재하는 경우 나중에 제거합니다.
제한 사항 : 이 스크립트는 <added text>
단일 기간과 정확히 같은 경우 작동하지 않습니다 .
echo -n "text to insert " ;tac filename.txt| tac > newfilename.txt
첫 번째 tac
는 파일을 뒤로 (마지막 줄 먼저) 파이프하므로 "삽입 할 텍스트"가 마지막에 나타납니다. 두 번째 tac
줄은 다시 한 번 감싸서 삽입 된 줄이 시작 부분에 있고 원본 파일이 원래 순서대로되어 있습니다.
별명을 가진 또 다른 솔루션. init rc / env 파일에 추가하십시오 :
addtail () { find . -type f ! -path "./.git/*" -exec sh -c "echo $@ >> {}" \; }
addhead () { find . -type f ! -path "./.git/*" -exec sh -c "sed -i '1s/^/$@\n/' {}" \; }
용법:
addtail "string to add at the beginning of file"
addtail "string to add at the end of file"
sed
.