텍스트 파일의 모든 줄 앞에 ##을 붙입니다.


30

일반 텍스트 파일의 모든 줄에 해시를 추가하고 싶습니다. 터미널과 GUI를 모두 사용하는 것이 좋습니다. 그냥 끝내면됩니다.

답변:


50

당신은 그렇게 할 수 있습니다 sed:

sed -i.bak 's/^/##/' file

이것은 줄의 시작 ( ^)을로 바꿉니다 ##.

-i.bak스위치를 사용하면 sed파일을 제자리에서 편집하지만 확장명이있는 백업 사본을 만듭니다 .bak.


1
+1이 백업 방법을 처음 접하게되었습니다. 나는 항상 인라인 바꾸기를 직접했다 : sed 's/^/##/' -i file. 이 경우에는 잘못 될 수 없으므로 선호됩니다. 다른 경우에는이 명령을 결합 diff -u file.bak file하여 차이점을 확인할 수 있습니다 (필요한 경우 파이프 연결 less). 작동하는 것으로 확인되면 백업을 제거 할 수 있습니다. 그렇지 않으면 간단한로 복원 할 수 있습니다 mv file.bak file.
Lekensteyn

1
우아한. 나는에 대해 생각하고 sed 's/^\(.*\)$/##\1/'있었지만 훨씬 더 좋습니다.
정렬

좋은 하나 .. 나는 Vim이 이것을하도록 제안하려고 생각하고 있었다
Sathish

이것은 차단 목록 파일을 변환하는 데 도움이되었습니다 :) 감사합니다 1+
Neil

8

다음은 perl을 사용하여이 문제에 대한 해결책입니다.

perl -e 'while (<>) {print "##$_"}' < infile > outfile

2
-p스위치는 또한 유용합니다 perl -pe 's/^/##/' infile > outfile. ( -i[extension]
제대로


4

bash방법은 다음과 같습니다 .

while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile

( 에서 bash 실행 read -r다른 인수하는 것처럼 작동합니다 IFS= read -r REPLY.)

이것은 beav_35의 perl 솔루션 에서 스타일 적으로 영감을 얻었습니다. 거대한 파일에 대해서는 훨씬 빠릅니다 perl.


3

sed -iPOSIX 표준이 아니므로 순수 주의자 인 경우 다음을 사용하려고합니다 ed.

printf ",s/^/##/\nw\nq" | ed -s file.txt

3

perl다른 곳에서 제시하는 것보다 쉬운 방법은 다음과 같습니다 .

perl -pi -e 'print "##"' YOURFILEHERE

이것은 (ab)에 perl -p주어진 명령을 실행 한 후 줄 을 인쇄 한다는 사실을 사용합니다 -e.


0

Ex 모드에서 Vim을 사용할 수 있습니다 :

ex -sc '%s/^/##/|x' file
  1. % 모든 줄을 선택하십시오

  2. s 대용품

  3. x 저장하고 닫습니다


0

파이썬의 매핑 기능과 리디렉션 stdin으로 수행 할 수 있습니다 :

$ cat input.txt                                                                                                          
lorem ipsum
quick brown fox
hello world
$ python -c 'import sys;print "".join(map(lambda x: "##"+x,sys.stdin.readlines()))'  < input.txt                         
##lorem ipsum
##quick brown fox
##hello world

출력을 새 파일에 저장하고 원본 대신 사용하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.