파일의 시작 부분에 텍스트를 삽입하는 방법?
지금까지 파일의 시작 부분에 줄을 추가하는 방법을 찾을 수 있었지만 정확히 내가 원하는 것은 아닙니다. 예제로 보여 드리겠습니다
파일 내용
some text at the beginning
결과
<added text> some text at the beginning
비슷하지만 새로운 줄을 만들고 싶지 않습니다 ...
sed
가능한 경우이 작업을 수행하고 싶습니다 .
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
바로 편집 할 수 있습니다.
개행 만 삽입하려면 다음을 수행하십시오.
sed '1i\\'
당신이 사용할 수있는 cat -
printf '%s' "some text at the beginning" | cat - filename
OS X에서는 sed -i <pattern> file
에 실패합니다. 백업 확장을 제공하는 경우, sed -i old <pattern> file
다음 file
동안 장소에서 수정 file.old
작성됩니다. 그런 다음 file.old
스크립트에서 삭제할 수 있습니다 .
문제 : 파일 상단에 파일을 부모 디렉토리의 기본 이름으로 태그하십시오.
즉
/mnt/Vancouver/Programming/file1
상단의 태그 file1
와를 Programming
.
해결 방법 1- 비어 있지 않은 파일 :
bn=${PWD##*/} ## bn: basename
sed -i '1s/^/'"$bn"'\n/' <file>
1s
텍스트를 파일의 1 행에 배치합니다.
해결 방법 2- 비어 있거나 비어 있지 않은 파일 :
sed
위 의 명령은 빈 파일에서 실패합니다. 다음은 https://superuser.com/questions/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 및 파일을 임시로 가져와야합니다. http://www.linfo.org/cat 의 맨 아래에있는 설명도 참조하십시오 . .html .
또한 파일을 덮어 쓸 때 확인을 요청하지 않도록 명령에 추가 -f
했습니다 mv
.
디렉토리를 재귀하려면 다음을 수행하십시오.
for file in *; do printf "${PWD##*/}\n" | cat - $file > temp && mv -f temp $file; done
Note also that this will break over paths with spaces; there are solutions, elsewhere (e.g. file globbing, or find . -type f ...
-type solutions) for those.
ADDENDUM: Re: my last comment, this script will allow you to recurse over directories with spaces in the paths:
#!/bin/bash
## https://stackoverflow.com/questions/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/"
# https://superuser.com/questions/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
There is a very easy way:
echo "your header" > headerFile.txt
cat yourFile >> headerFile.txt
Hi with carriage return:
sed -i '1s/^/your text\n/' file
To add a line to the top of the file:
sed -i '1iText to add\'
my two cents:
sed -i '1i /path/of/file.sh' filename
This will work even is the string containing forward slash "/"
echo -n "text to insert " ;tac filename.txt| tac > newfilename.txt
The first tac
pipes the file backwards (last line first) so the "text to insert" appears last. The 2nd tac
wraps it once again so the inserted line is at the beginning and the original file is in its original order.
Just for fun, here is a solution using ed
which does not have the problem of not working on an empty file. You can put it into a shell script just like any other answer to this question.
ed Test <<EOF
a
.
0i
<added text>
.
1,+1 j
$ g/^$/d
wq
EOF
The above script adds the text to insert to the first line, and then joins the first and second line. To avoid ed exiting on error with an invalid join, it first creates a blank line at the end of the file and remove it later if it still exists.
Limitations: This script does not work if <added text>
is exactly equal to a single period.
Use subshell:
echo "$(echo -n 'hello'; cat filename)" > filename
참고URL : https://stackoverflow.com/questions/9533679/how-to-insert-a-text-at-the-beginning-of-a-file
'Programing' 카테고리의 다른 글
가장 가까운 정수로 반올림 (0) | 2020.05.15 |
---|---|
반복하는 동안 컬렉션에서 요소 제거 (0) | 2020.05.15 |
Virtualenvs의 깨진 참조 (0) | 2020.05.15 |
TaskCompletionSource는 언제해야합니까 (0) | 2020.05.15 |
(Java) 패키지 구성에 대한 모범 사례가 있습니까? (0) | 2020.05.15 |