명령줄에서 파일의 모든 줄 시작 부분에 문자열을 추가하는 가장 쉬운 방법은 무엇입니까?

명령줄에서 파일의 모든 줄 시작 부분에 문자열을 추가하는 가장 쉬운 방법은 무엇입니까?

모든 줄의 시작 부분에 문자열을 추가하는 방법을 찾고 있습니다(모든 줄에 동일한 문자열). 사용자 정의할 수 있는 것이 아니라 기억하기 쉽고 모든 POSIX 호환 플랫폼(및 모든 셸)에서 사용할 수 있는 것입니다.

답변1

:|paste -d'foo ' - - - - input > output

(농담입니다. 여기에 게시된 모든 솔루션 중에서 가장 빠르다는 것을 알게 되실 수도 있습니다. :-b).

정식 방법은 다음과 같습니다.

sed 's/^/foo /' < input > output

그러나 임의의 문자열에는 쉽게 적용되지 않습니다. 예를 들어,

sed "s/^/$var /"

, , 개행 문자가 $var포함되지 않은 경우에만 작동하며 , 적어도 보장할 수 없는 경우 GNU sed의 임의 명령 실행 취약점입니다.&\/

그런 점에서,

export var
awk '{print ENVIRON["var"], $0}'

또는

perl -pe '$_="$ENV{var} $_"'

더 잘 작동 할 것입니다.

답변2

당신이 사용할 수있는 sed:

sed -i 's/^/your_string /' your_file

Stephane과 Marco의 의견 덕분에 -i옵션은 POSIX가 아닙니다. 위의 작업을 수행하는 POSIX 방법은 다음과 같습니다.

sed 's/^/your_string /' your_file > tmp_copy && mv tmp_copy your_file

또는 perl:

perl -pi -e 's/^/your_string /' your_file

설명

두 명령 모두 정규식 대체를 수행하여 줄의 시작 부분( ^)을 원하는 문자열로 바꿉니다. 두 명령의 스위치 -i는 파일이 그 자리에서 편집되었는지 확인합니다(즉, 변경 사항이 표준 출력으로 인쇄되는 대신 파일에 반영됩니다).

sed모든 POSIX 호환 OS에서 사용할 수 있어야 하며 perl아마도 다음을 제외한 대부분의 최신 Unices에서 사용할 수 있어야 합니다.노력을 겪었다그것을 제거하는 것.

답변3

awk나는 "foo"라는 문자열을 앞에 추가하여 해결책을 제시합니다 .

awk '{ print "foo", $0; }' input > output

awk크로스 플랫폼이며 모든 POSIX 시스템에서 사용할 수 있습니다. 내부 편집은 수행되지 않습니다. 두 번째 파일을 만들지 않고 파일을 편집하려면 임시 파일을 사용해야 합니다. Joseph의 sed답변을 참조하면 구문이 표시됩니다. 또 다른 해킹은 기본적으로 원본 파일과 동일한 파일 이름을 가진 임시 파일을 생성하는 다음 구문을 사용하는 것입니다.

{ rm file; awk '{ print "foo", $0 }' > file; } < file

답변4

다음을 수행하는 데 사용할 수 있습니다 perl.

$ perl -pi -e 's/^/mystring /' afile.txt

샘플 파일을 만듭니다.

$ seq 5 > afile.txt

$ cat afile.txt
1
2
3
4
5

위 명령을 실행합니다.

$ perl -pi -e 's/^/mystring /' afile.txt

$ cat afile.txt
mystring 1
mystring 2
mystring 3
mystring 4
mystring 5

관련 정보